Torch中"方法_"和"方法"的计算区别(如add/sub/mul/div)
在Pytorch中计算变量往往伴随着in-place,就是说存在将原值覆盖的操作可行性。其主要目的还是节约计算空间。
其实在torch计算中这类计算还是挺多的,基本上覆盖了各种计算,加减乘除,幂指数计算等等。
"方法_"表示in-place开启,即替换原值
“方法"表示in-place关闭,即需要在新的存储空间进行储存数据
以加法add为例,
在”.add_()"方法下,变量a值被覆盖
import torch
a = torch.ones(5);
print("a : {%s}"%a)
b = 3*torch.ones(5)
print("b: {%s}"%b)
c = a.add_(b)
print("a : {%s}"%a)
print("c : {%s}"%c)
结果:
a : {tensor([1., 1., 1., 1., 1.])}
b : {tensor([3., 3., 3., 3., 3.])}
a : {tensor([4., 4., 4., 4., 4.])}
c : {tensor([4., 4., 4., 4., 4.])}
在".add()"方法下,变量a值不会被覆盖
import torch
a = torch.ones(5);
print("a : {%s}"%a)
b = 3*torch.ones(5)
print("b : {%s}"%b)
c = a.add(b)
print("a : {%s}"%a)
print("c : {%s}"%c)
结果:
a : {tensor([1., 1., 1., 1., 1.])}
b : {tensor([3., 3., 3., 3., 3.])}
a : {tensor([1., 1., 1., 1., 1.])}
c : {tensor([4., 4., 4., 4., 4.])}