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

结论:

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])

你可能感兴趣的:(Python,/,Pycharm,/,Matplotlib,pytorch,深度学习,python)