caffe中的in-place操作

caffe利用in-place计算可以节省内(显)存,同时还可以省去反复申请和释放内存的时间。

原因可以参考这篇知乎答案:

作者:朱坚升
链接:https://www.zhihu.com/question/46501015/answer/101576664
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相同名字的bottom和top这些blob就是同一个blob,占用的是同一个空间。

简单来解释就是:int a;a = 0;a = 1;你可以无数次对这个a进行改变。对于blob来说也是一样。

至于谁先谁后,那就是看你的网络定义哪个layer在前,它就先计算。如果有两个layer输出的blob名称是一样的,那么它们的输入blob也一定会有这个blob,也就是,如果layer不是对输入blob本身操作,就不允许输出blob同名。

比如:layer1和layer2的输入和输出blob都是blob1,它们都是对blob1进行操作,这是允许的,直接按顺序计算就可以了。
layer1的输入blob是blob1,输出blob是blob_out,layer2的输入blob是blob2,输出blob也是blob_out,那么这就是不允许的。

因为它们不是对它们的输入blob本身进行操作,假设你允许这样的操作,那么后运算的layer会将blob_out覆盖成后运算的结果,前面运算的blob_out的结果就消失了。

当然,layer1和layer2的输入和输出blob都是blob1,它们都是对blob1进行操作,比如layer1先计算,然后layer2后计算,计算layer2的结果也是会把layer1的结果给覆盖,只不过是网络已经不需要这个layer1的结果而已,因为它已经前向传播过去了...

一般来说,convolution、pooling层应该没办法支持,因为top blob和bottom blob的size不一致。

目前已知的支持in-place操作的层有:ReLU层,Dropout层,BatchNorm层,Scale层

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值