Variable

作者: Mr旺旺 | 来源:发表于2019-02-12 22:32 被阅读0次

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

相关文章

网友评论

      本文标题:Variable

      本文链接:https://www.haomeiwen.com/subject/kugceqtx.html