in-place
inplace-选择是否进行覆盖运算
Torch 为了提高速度,model:forward() 操作之后赋予的变量是不给这个变量开盘新的存储空间的,而是 引用。就相当于 起了个别名。
in-place operation在pytorch中是指改变一个tensor的值的时候,不经过复制操作,而是直接在原来的内存上改变它的值。可以把它成为原地操作符。
在pytorch中经常加后缀“”来代表原地in-place operation,比如说.add() 或者.scatter()。python里面的+=,*=也是in-place operation。
在 pytorch 中, 有两种情况不能使用 inplace operation:
-
对于 requires_grad=True 的 叶子张量(leaf tensor) 不能使用 inplace operation
-
对于在 求梯度阶段需要用到的张量 不能使用 inplace operation
如果你使用了in-place operation而没有报错的话,那么你可以确定你的梯度计算是正确的。