何时在 Caffe 中使用就地层?

Posted

技术标签:

【中文标题】何时在 Caffe 中使用就地层?【英文标题】:When to use in-place layers in Caffe? 【发布时间】:2016-11-23 07:33:13 【问题描述】:

通过将底部和顶部 blob 设置为相同,我们可以告诉 Caffe 进行“就地”计算以保持内存消耗。

目前我知道我可以安全地就地使用"BatchNorm""Scale""ReLU" 层(如果我错了,请告诉我)。虽然其他层似乎有一些问题(this issue 似乎是一个例子)。

它如何与反向传播一起工作?

【问题讨论】:

@Shai 谢谢你的回答,肯定有帮助! 【参考方案1】:

正如您所指出的,就地层通常不能“开箱即用”。 对于某些层,这非常简单("ReLU" 和其他神经元激活层)。 但是,对于其他人来说,它需要在代码中进行特殊处理。例如,"PReLU" 层的实现有特定的缓存bottom_memory_ 成员变量,用于存储反向传播所需的信息。 您可以查看专门测试if (top[0] == bottom[0]) 的其他层的类似代码,以查看该层是否用于“就地”案例。

此外,输入和输出具有不同形状的就地层几乎没有意义,因此"Convolution""InnerProduct""Pool" 等层不被视为“in -放置”层。

【讨论】:

谢谢。 BatchNorm 层的in-place=Truein-place=False 怎么样?有时,我看到了 BatchNorm 层的论文in-place=False。我们对这种情况有什么好处吗? @user8264 我对 BatchNorm 层的内部不是很熟悉,所以我不能对此发表评论。有时就地使用需要更多的计算(为了节省空间)......你真的需要问指定in_place=False的人......

以上是关于何时在 Caffe 中使用就地层?的主要内容,如果未能解决你的问题,请参考以下文章

使用现有层在 Caffe 中进行 L2 归一化

caffe中应该如何使用“BatchNorm”层?

caffe添加自己编写的Python层

如何使用 caffe batch norm

使用 Caffe 内存层不会产生一致和确定性的结果

caffe数据层及参数