PyTorch:中.add()和.add_() / .mul()和.mul_() / .exp()和.exp_()的区别

这篇博客详细介绍了PyTorch中的in-place操作,包括.add(), .mul_()和.exp_()。这些操作分别用于张量的加法、乘法和指数计算,并且讨论了它们的区别,特别是.in-place操作如何直接修改原有张量的值。通过实例展示了每个操作的使用方法及其对张量的影响。
摘要由CSDN通过智能技术生成

结论:

add 加法 / mul 乘法 / exp 以e为底的指数。

以 “下划线 _” 结尾的 ,均为in-place。
可以简单理解为:修改了对应变量中的数值。
Torch里面所有带 “下划线 _” 的操作,都是in-place的。

.add()和.add_()

.add()和.add_()都能把两个张量加起来,但.add_是in-place操作,如:x.add_(y),x+y的结果会存储到原来的x中。

import torch

x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])
z = x.add(y)
print('x.add(y) is: {}'.format(z))
print('after x.add(y), x is: {}'.format(x))
z = x.add_(y)
print('x.add_(y) is: {}'.format(z))
print('after x.add_(y), x is: {}'.format(x))

输出为:

x.add(y) is: tensor([5, 7, 9])
after x.add(y), x is: tensor([1, 2, 3])

x.add_(y) is: tensor([5, 7, 9])
after x.add_(y), x is: tensor([5, 7, 9])

.mul()和.mul_()

x.mul(y)或x.mul_(y)实现把x和y点对点相乘,其中x.mul_(y)是in-place操作,会把相乘的结果存储到x中。值得注意的是,x必须是tensor, y可以是tensor,也可以是数。

import torch

x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])
z = x.mul(y)
print('x.mul(y) is: {}'.format(z))
print('after x.mul(y), x is: {}'.format(x))
z = x.mul_(y)
print('x.mul_(y) is: {}'.format(z))
print('after x.mul_(y), x is: {}'.format(x))

输出为:

x.mul(y) is: tensor([ 4, 10, 18])
after x.mul(y), x is: tensor([1, 2, 3])

x.mul_(y) is: tensor([ 4, 10, 18])
after x.mul_(y), x is: tensor([ 4, 10, 18])

.exp()和.exp_()

.exp()和.exp_()都能实现以e为底的指数,区别是.exp_()是in-place操作。

import torch

x = torch.FloatTensor([1, 2, 3])
z = x.exp()
print('x.exp() is: {}'.format(z))
print('after x.exp(), x is: {}'.format(x))
z = x.exp_()
print('x.exp_() is: {}'.format(z))
print('after x.exp_(), x is: {}'.format(x))

输出为:

x.exp() is: tensor([ 2.7183,  7.3891, 20.0855])
after x.exp(), x is: tensor([1., 2., 3.])

x.exp_() is: tensor([ 2.7183,  7.3891, 20.0855])
after x.exp_(), x is: tensor([ 2.7183,  7.3891, 20.0855])
  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值