#什么是Variable
#在torch中的variable就是一个存放会变化的值的地理位置。里面的值会不断变化
#就像一个装有鸡蛋的篮子,鸡蛋数会不断变化。
#torch里面的tensor就是鸡蛋
#如果用一个variable进行计算,那么返回的也是一个同类型的Variable
import torch
from torch.autograd import Variable
#生蛋
tensor = torch.FloatTensor([[1,2],[3,4]])
#把鸡蛋放在一个篮子里
variable = Variable(tensor,requires_grad = True)
#在参与误差反向传播时,梯度应该使用require grad=True关键字来计算。
print(tensor)
print(variable)
#对比tensor和variable
t_out = torch.mean(tensor*tensor) #x^2
v_out = torch.mean(variable*variable) #x^2
print(
'\nt_out:',t_out,
'\nv_out:',v_out
)
#variable 可以进行反向传播
#tensor 不可以进行反向传播
v_out.backward()#variable 进行反向传播
print(
'\nvariable.grad',variable.grad)#反向传播后梯度的数据
在计算Variable时,它在幕布背景后面一步步默默搭建一个庞大的系统,叫做计算图,computational graph是将所有计算节点都连接起来,最后在误差反向传播的时候,一次性将所有的Variable里面的所有修改幅度(梯度)都计算出来,而tensor没有这个能力。