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

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

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

何时在 Caffe 中使用就地层?
它如何与反向传播一起工作?

【问题讨论】:

  • @Shai 谢谢你的回答,肯定有帮助!

标签: machine-learning neural-network deep-learning caffe backpropagation


【解决方案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的人......
猜你喜欢
  • 1970-01-01
  • 2017-05-27
  • 1970-01-01
  • 2016-07-15
  • 1970-01-01
  • 2017-07-25
  • 2017-02-15
  • 1970-01-01
  • 2016-01-23
相关资源
最近更新 更多