c++ - 我写了一个自定义的 caffe 层。但是在训练期间它说“**层不需要反向计算”
问题描述
我定义了一个新caffe
层,包括new_layer.cpp
、和. 当我训练模型时,它说:new_layer.cu
new_layer.hpp
caffe.proto
new_layer 不需要反向计算
但是,我确实定义了backward_cpu
and backward_gpu
。我试图设置lr_mult
为非 0。但是我应该在哪里lr_mult
为自定义层定义?除此之外,还有其他方法可以让我的自定义层执行反向传播吗?
解决方案
您可以通过设置强制 caffe 反向传播
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
}
您可以在此处查看更多信息。
推荐阅读
- javascript - 将 textarea 中的内容导出到 Html 在 Internet Explorer 11 上不起作用
- .net - 在 VB.net 中使用 TreeListView
- powershell - 在高级 PowerShell 函数中声明多个别名
- c++ - 对 std::unique 实现感到困惑?
- c - 用 strtok 取行中的最后一个单词
- java - 从Java中的接口实现泛型方法
- c++ - 在抛出 'std::invalid_argument' 的实例后调用终止 what(): stoi (找不到什么问题)
- web - Webrtc 连接测试 - 未知 API 密钥
- styled-components - 样式化的组件是否被记忆?
- html - 将 div 定位在导航栏中垂直居中并向右