pytorch入门(三):加法的陷阱

如何执行加法?


有几种方法执行加法运算
先准备两个变量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.])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值