tensor是Pytorch中的完美组件,但是构建神经网络还远远不够,我们需要能够构建计算图的tensor,这就是Variable。在torch中的Variable就是一个存放会变化的值的地理位置,里面的值会不断变化,就像一个装鸡蛋的篮子,鸡蛋数会不断发生变化,里面的鸡蛋就是torch的Tensor了(torch是用tensor计算的,tensor里面的参数都是variable的形式)。Variable是对tensor的封装,操作和tensor是一样的,但是每个Variable都有三个属性,Variable中的tensor本身.data,对应tensor的梯度.grad以及这个Variable是通过说明方式得到的.grad_fn。如果用Variable进行计算,那返回的也是一个同类型的Variable.
首先定义一个Variable:
先是导入torch中的variable模块,然后定义#将tensor变成variable(将鸡蛋‘tensor’放进‘篮子’里),默认Variable是不需要求梯度的,所以用这个方式(requires_grad=True)申明需要求梯度,要参与误差反向传播。
#注:tensor不能反向传播,variable可以反向传播!
计算x^2的均值:
对比tensor和variable的计算这里,我们看不出有什么不同,但是当Variable计算时,他在幕后一步步默默地搭建着一个庞大的系统,叫做计算图,这个图将所有的计算步骤(结点)都连接起来,最后进行误差反向传递的时候,一次性将所有variable里面的修改幅度(梯度)都计算出来,而tensor不行。
Variable进行反向传播:
输出variable中的梯度#对于上面两步,计算过程如下:variable_mean = 1/4 * sum(variable * variable)
variable.grad = d(variable_mean)/d(variable) = 1/4*2*variable = 1/2*variable
#要清楚,variable是计算图的一部分,可以用来传递误差
下面来获取Variable里面的数据:
输出variable形式的数据 用.data输出tensor形式的数据 转换为numpy形式的数据by PengSW_10 on 2019/2/12
网友评论