首页 > 解决方案 > 我写了一个自定义的 caffe 层。但是在训练期间它说“**层不需要反向计算”

问题描述

我定义了一个新caffe层,包括new_layer.cpp、和. 当我训练模型时,它说:new_layer.cunew_layer.hppcaffe.proto

new_layer 不需要反向计算

但是,我确实定义了backward_cpuand backward_gpu。我试图设置lr_mult为非 0。但是我应该在哪里lr_mult为自定义层定义?除此之外,还有其他方法可以让我的自定义层执行反向传播吗?

标签: c++machine-learningdeep-learningcaffebackpropagation

解决方案


您可以通过设置强制 caffe 反向传播

force_backward: true

在您的 net.prototxt 文件的开头。caffe 的默认行为是仅在确定需要梯度时才向后计算。有时(尤其是当有自定义层时)这种启发式方法并不准确。通过设置force_backward: truecaffe 将计算模型中所有层的梯度(尽可能)。
在 中的评论中阅读更多信息caffe.proto

关于lr_mult:它是param图层部分的一部分 - 此部分是为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
}

您可以在此处查看更多信息。


推荐阅读