在pytorch中,对一个tensor进行操作时我们应该要知道我们是
(1)直接修改这个tensor;
(2)返回一个新的tensor,而旧的tensor并不修改。
pytorch中对tensor的操作的函数后加上了下划线,则表明这是一个in-place类型,也就是(1)这种情况。
例如(2)
import torch
x = torch.randn([2,3])
print(x)
y = x.abs() #没加下划线,不会对x直接操作,而是赋予y
print(y)
print(x)
输出为:
tensor([[-0.1599, -0.6898, -0.1135],
[ 0.7248, 0.2283, 1.8987]])
tensor([[0.1599, 0.6898, 0.1135],
[0.7248, 0.2283, 1.8987]])
tensor([[-0.1599, -0.6898, -0.1135],
[ 0.7248, 0.2283, 1.8987]])
例如(1)
import torch
x = torch.randn([2,3])
print(x)
z = x.abs_() #加了下划线,直接对x操作,x会改变
print(z)
print(x)
输出为
tensor([[-0.8258, 0.5759, -2.0546],
[ 0.4923, 0.9983, 0.7673]])
tensor([[0.8258, 0.5759, 2.0546],
[0.4923, 0.9983, 0.7673]])
tensor([[0.8258, 0.5759, 2.0546],
[0.4923, 0.9983, 0.7673]])