何时在 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=True
和in-place=False
怎么样?有时,我看到了 BatchNorm 层的论文in-place=False
。我们对这种情况有什么好处吗?
@user8264 我对 BatchNorm 层的内部不是很熟悉,所以我不能对此发表评论。有时就地使用需要更多的计算(为了节省空间)......你真的需要问指定in_place=False
的人......以上是关于何时在 Caffe 中使用就地层?的主要内容,如果未能解决你的问题,请参考以下文章