如何执行加法?
有几种方法执行加法运算
先准备两个变量a、b
a = torch.Tensor([1,1,1])
b = torch.Tensor([2,3,4])
第一种方法是写一个加法表达式
c = a + b
print(c)
结果
tensor([3., 4., 5.])
第二种方法是调用torch的加法函数
c = torch.add(a, b)
print(c)
结果
tensor([3., 4., 5.])
也可以调用a的加法函数
c = a.add(a, b)
print(c)
结果
tensor([3., 4., 5.])
运算后,a、b本身有没有变?
print('a =', a)
print('b =', b)
结果
a = tensor([1., 1., 1.])
b = tensor([2., 3., 4.])
跟预期一样,操作数是不变的。
再来试试带下划线的版本,这个版本有副作用,它不仅做加法运算,而且还顺便改变了某些变量的值。
a.add_(b)
print('a =', a)
结果
a = tensor([3., 4., 5.])
可以发现,a的值变了,它原来是1来着。
如果执行c = a.add_(b)的话,要避开一个坑。
c = a.add_(b)
c += 100
print('a =', a)
print('id(c) == id(a)?', id(c) == id(a))
结果
a = tensor([105., 107., 109.])
id(c) == id(a)? True
幺蛾子!改变c,a却变了,因为c就是a,它们的id相等。所以调用那些个带下划线的函数,像这里的add_,就不要赋值了。
最后看看就地更新。out=c表示add的结果保存于c。要注意的是一不小心,d也变了。
a = torch.Tensor([1,1,1])
b = torch.Tensor([2,3,4])
d = torch.Tensor([1])
c = d
c = a + b
print(d) # d不受影响
c = d
torch.add(a, b, out=c)
print(d) # d被改变了
print()
结果
tensor([1.])
tensor([3, 4., 5.])