我写了一个自定义的咖啡层.但是在训练期间,它说“**层不需要向后计算”
I wrote a custom caffe layer. But during training it says "**layer does not need backward computation"
我在caffe.proto
中定义了一个新的caffe
层,包括new_layer.cpp
、new_layer.cu
、new_layer.hpp
和相关参数。当我训练模型时,它说:
new_layer不需要反向计算
但是,我确实定义了backward_cpu
和backward_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
}
您可以在此处查看更多信息。
相关文章:
- "No default constructor exists "即使我不需要它
- 如果在C++中不需要构造函数或析构函数,是否有必要显式声明它?
- 我写了一个自定义的咖啡层.但是在训练期间,它说“**层不需要向后计算”
- Clang说is_same_v<int,double>的用法不是constexpr,不知道它怎么不是
- 外部"C":什么需要它,什么不需要它?
- 当我不需要它进行C++计算时,如何忽略一些输入?
- 不能直接分配元素 std::array,它说没有运算符"="匹配
- 如果 std::shared_ptr 是从非 null 构造的,为什么它不需要知道完整的类型?
- 它说头文件有问题,mmsystem.h,我不能使用PlaySound()
- 有没有一种方法可以在编译时加载到omp.h中,因此机器永远不需要在运行时获取它
- 下面链接中的声明不需要存储类说明符"static"。我说的对吗?
- 为什么在单个变量上我需要指定内存地址,而在数组上我不需要它?
- 为什么c++中的main()函数不需要调用,它无论如何都会运行
- 如何将成员函数作为参数传递给不需要它的函数?
- 我可以 std::bind 基类的构造函数,以便派生不需要显式调用它吗?
- 为什么 new 不需要强制转换为指针,即使 malloc 需要它?
- 为什么我不能将类指针传递给访问者类?它说没有匹配的功能
- 如果std::make_unique从未被调用,为什么它在默认成员初始化中不需要参数
- 类的概念,它具有一些不需要逻辑定义的属性
- QPushButton工具提示插入一个换行符而不需要我指定它