Точность вывода и потери из одного слоя в кафе
Я написал собственный слой и хотел бы вывести как accuracy
а также loss
в то же время. Можно ли это сделать с помощью caffe
следующим образом?
Что-то похожее:
layer {
name: ""
bottom: ""
top: loss1
top: loss2
top: accuracy
}
1 ответ
Вы можете иметь столько "вершин", сколько хотите для своего слоя.
Во-первых, вам нужно определить количество "верхних" уровней, которые вычисляет ваш слой. Это делается путем переопределения ExactNumBottomBlobs()
,
Ваш LayerSetup
а также Reshape
Методы также должны учитывать новое число "верхних", а также настраивать и изменять их.
Обратите внимание, что поскольку ваш слой является слоем с потерями, вам придется иметь loss_weight
значение для каждой "вершины":
layer {
name: "my_new_layer"
type: "MyNewLayer"
bottom: "x"
top: "loss1"
top: "loss2"
top: "accuracy"
loss_weight: 1
loss_weight: 1.3 # you might want loss2 to have a bit more impact
loss_weight: 0 # accuracy should not affect gradients...
}
И ваш класс слоя должен быть получен из LossLayer<Dtype>
класс, а не более абстрактный Layer<Dtype>
учебный класс.
Для получения дополнительной информации о том, как внедрить новые слои в caffe, смотрите эту страницу.
Также обратите внимание, что "SoftmaxWithLoss"
Слой имеет необязательный второй "верх", вы можете посмотреть в коде этого слоя, чтобы увидеть, как это реализовано.