我写了一个自定义咖啡层。但是在训练过程中它说“**层不需要向后计算”
I wrote a custom caffe layer. But during training it says "**layer does not need backward computation"
我定义了一个新的caffe
层,包括new_layer.cpp
、new_layer.cu
、new_layer.hpp
和caffe.proto
中的相关参数。当我训练模型时,它说:
new_layer does not need backward computation
不过,我确实定义了backward_cpu
和backward_gpu
。我试图将 lr_mult
设置为不为 0。但是我应该在哪里为自定义层定义 lr_mult
?除了这个,有没有其他方法可以让我的自定义层执行反向传播?
你可以通过设置
强制caffe反向传播
force_backward: true
在 net.prototxt 文件的开头。 caffe 的默认行为是仅在确定需要梯度时才向后计算。有时(尤其是当有自定义层时)这种启发式方法并不准确。通过设置 force_backward: true
,caffe 将计算模型中所有层的梯度(只要可能)。
在 caffe.proto
.
中的评论中阅读更多内容
关于 lr_mult
: it is part of the param
section of the layer - this section is defined for all layers in caffe.proto
。因此,您只需将此子句添加到 net.prototxt:
中的图层定义中
force_backward: true # cannot hurt...
layer {
name: "my_layer"
type: "MyLayerType"
bottom: "input"
top: "output"
my_layer_param { ... }
param: { lr_mult: 1 } # there you go
}
您可以看到更多信息。
我定义了一个新的caffe
层,包括new_layer.cpp
、new_layer.cu
、new_layer.hpp
和caffe.proto
中的相关参数。当我训练模型时,它说:
new_layer does not need backward computation
不过,我确实定义了backward_cpu
和backward_gpu
。我试图将 lr_mult
设置为不为 0。但是我应该在哪里为自定义层定义 lr_mult
?除了这个,有没有其他方法可以让我的自定义层执行反向传播?
你可以通过设置
强制caffe反向传播force_backward: true
在 net.prototxt 文件的开头。 caffe 的默认行为是仅在确定需要梯度时才向后计算。有时(尤其是当有自定义层时)这种启发式方法并不准确。通过设置 force_backward: true
,caffe 将计算模型中所有层的梯度(只要可能)。
在 caffe.proto
.
关于 lr_mult
: it is part of the param
section of the layer - this section is defined for all layers in caffe.proto
。因此,您只需将此子句添加到 net.prototxt:
force_backward: true # cannot hurt...
layer {
name: "my_layer"
type: "MyLayerType"
bottom: "input"
top: "output"
my_layer_param { ... }
param: { lr_mult: 1 } # there you go
}
您可以看到更多信息