版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/github_39611196/article/details/82345396
神经网络里面的参数都是变量(variable)的形式。
Tensor和Variable在反向传播的时候会出现差别,Tensor不能反向传播,Variable可以反向传播。
Variable containing是指该variable属于搭建图的一部分。
示例代码1:
import torch
from torch.autograd import Variable
tensor = torch.FloatTensor([[1, 2], [3, 4]])
# requires_grad表示需不需要将定义的variable放到反向传播中
variable = Variable(tensor, requires_grad=True)
print(tensor)
print(variable)
运行结果:
1 2
3 4
[torch.FloatTensor of size 2x2]Variable containing:
1 2
3 4
[torch.FloatTensor of size 2x2]
Tensor和variable的运算,示例代码:
import torch
from torch.autograd import Variable
tensor = torch.FloatTensor([[1, 2], [3, 4]])
# requires_grad表示需不需要将定义的variable放到反向传播中
variable = Variable(tensor, requires_grad=True)
# mean
t_out = torch.mean(tensor * tensor)
v_out = torch.mean(variable * variable)
print(t_out)
print(v_out)
v_out.backward()
# v_out = 1/4 * sum(var * var)
# d(v_out)/d(var) = 1/4 * 2 * variable = variable /2
print(variable.grad)
print(variable.data)
# 将variable转换为numpy不能像Tensor一样使用 tensor。numpy
print(variable.data.numpy())
运行结果:
7.5
Variable containing:
7.5000
[torch.FloatTensor of size 1]Variable containing:
0.5000 1.0000
1.5000 2.0000
[torch.FloatTensor of size 2x2]
1 2
3 4
[torch.FloatTensor of size 2x2][[1. 2.]
[3. 4.]]