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