通过将底部和顶部blob设置为相同,我们可以告诉Caffe进行"就地"计算以保持内存消耗.
目前,我知道我可以就地安全地使用"BatchNorm"
,"Scale"
并且"ReLU"
层(请让我知道,如果我错了).虽然它似乎对其他层有一些问题(这个问题似乎是一个例子).
何时在Caffe中使用就地层?
它如何与反向传播一起工作?
正如您所指出的那样,就地层通常不会"开箱即用".
对于某些层,它非常简单("ReLU"
和其他神经元激活层).
但是,对于其他人来说,它需要特殊的代码处理.例如,"PReLU"
layer 的实现具有特定的缓存bottom_memory_
成员变量,用于存储backprop所需的信息.
您可以看到专门测试的其他图层的类似代码,if (top[0] == bottom[0])
以查看该图层是否在"就地"情况下使用.
此外,它没有什么意义有就地层的量,输入和输出是不同的形状,从而层,例如"Convolution"
,"InnerProduct"
,"Pool"
不被视为对"就地"层的候选者.