我们分别不用.data和用.data打印一个随机张量看一下
rand_weight = torch.randn(3, 6) y = rand_weight x = rand_weight.data print(y) print(x)
结果:
tensor([[ 1.0963, -1.7917, 0.6733, 0.3536, -1.2165, 2.7969],
[ 1.2443, -1.8792, 0.9939, -0.4416, 0.5122, 0.9356],
[ 1.6338, -1.9056, -0.8147, -0.9045, -0.0339, 0.5759]])
tensor([[ 1.0963, -1.7917, 0.6733, 0.3536, -1.2165, 2.7969],
[ 1.2443, -1.8792, 0.9939, -0.4416, 0.5122, 0.9356],
[ 1.6338, -1.9056, -0.8147, -0.9045, -0.0339, 0.5759]])
可以发现二者没有区别,表面上没有。但其实x已经独立于计算图之外。
print(x.requires_grad)
结果:False
那么独立于计算图之后,对x的操作就不会被记录了。例如我们要进行激活操作。
print(y) print(x.sigmoid())
结果:
tensor([[-1.2751, -0.6225, 0.8947, -2.2593, -0.8121, 0.9327],
[ 0.1459, -0.2430, -0.9179, 0.4230, 1.3441, 0.6436],
[ 1.6943, 1.9939, -1.3471, 0.5038, 0.3765, 0.3789]])
tensor([[0.2184, 0.3492, 0.7098, 0.0945, 0.3074, 0.7176],
[0.5364, 0.4395, 0.2854, 0.6042, 0.7932, 0.6556],
[0.8448, 0.8802, 0.2063, 0.6233, 0.5930, 0.5936]])