我编写了一个自定义图层,希望同时输出accuracy
和loss
。这可以通过以下方式使用caffe
来完成吗?
类似于:
layer {
name: ""
bottom: ""
top: loss1
top: loss2
top: accuracy
}
答案 0 :(得分: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中实施新图层的详细信息,请参阅this page
另请注意,"SoftmaxWithLoss"
图层有一个可选的第二个“顶部”,您可能需要查看该图层的代码以了解其实现方式。