Точность вывода и потери из одного слоя в кафе

Я написал собственный слой и хотел бы вывести как 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" Слой имеет необязательный второй "верх", вы можете посмотреть в коде этого слоя, чтобы увидеть, как это реализовано.

Другие вопросы по тегам