我写了一个自定义的咖啡层.但是在训练期间,它说“**层不需要向后计算”

I wrote a custom caffe layer. But during training it says "**layer does not need backward computation"

本文关键字:它说 不需要 计算 一个 咖啡 自定义      更新时间:2023-10-16

我在caffe.proto中定义了一个新的caffe层,包括new_layer.cppnew_layer.cunew_layer.hpp和相关参数。当我训练模型时,它说:

new_layer不需要反向计算

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

您可以通过设置

force_backward: true

在您的 net.prototxt 文件的开头。caffe 的默认行为是仅在确定需要梯度时才向后计算。有时(尤其是当有自定义层时(这种启发式是不准确的。通过设置force_backward: true caffe将计算模型中所有层的梯度(只要有可能(。
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
}

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

相关文章: