caffe中同一层的输出精度和损失

时间:2017-08-09 05:05:33

标签: neural-network deep-learning caffe loss

我编写了一个自定义图层,希望同时输出accuracyloss。这可以通过以下方式使用caffe来完成吗?

类似于:

layer {
name: ""
bottom: ""
top: loss1
top: loss2
top: accuracy
}

1 个答案:

答案 0 :(得分:1)

您可以为图层添加任意数量的“顶部”。

首先,您需要定义图层计算的“顶部”数量。这是通过覆盖ExactNumBottomBlobs()来完成的 您的LayerSetupReshape方法也应该考虑新的“顶部”和设置数量,并重新塑造这些“顶部”。

请注意,由于您的图层是损耗图层,因此每个“顶部”都必须具有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中实施新图层的详细信息,请参阅this page 另请注意,"SoftmaxWithLoss"图层有一个可选的第二个“顶部”,您可能需要查看该图层的代码以了解其实现方式。