Pytorch中Variable变量
1.它是一个可以变化的变量,符合反向传播和参数更新的属性,而tensor不能反向传播
pytorch中的tensor就像鸡蛋,Variable就像装鸡蛋的篮子
import torch
from torch.autograd import Variable # torch 中 Variable 模块
tensor = torch.FloatTensor([[1,2],[3,4]])
# 把鸡蛋放到篮子里, requires_grad是参不参与误差反向传播, 要不要计算梯度,Variable默认不需要被求导的
variable = Variable(tensor, requires_grad=True)
print(tensor)
"""
1 2
3 4
[torch.FloatTensor of size 2x2]
"""
print(variable)
"""
Variable containing:
1 2
3 4
[torch.FloatTensor of size 2x2]
"""
2.Variable计算时,会逐步生成计算图,这个图将所有的计算节点都连接起来,最后进行loss反向传播时,一次性将所有Variable里的梯度计算出来,然而tensor没有这个能力
loss.backward() # 模拟 v_out 的误差反向传递
print(variable.grad) # 初始 Variable 的梯度
'''
0.5000 1.0000
1.5000 2.0000
'''
3.我们在输出时常将Variable形式的数据进行转换,转换成tensor形式或者numpy形式,因为有时候直接输出Variable形式用不了
print(variable.data) # 将variable形式转为tensor 形式
"""
1 2
3 4
[torch.FloatTensor of size 2x2]
"""
print(variable.data.numpy())#numpy形式
"""
[[ 1. 2.]
[ 3. 4.]]
"""