欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pytorch学习(二)variable变量

程序员文章站 2022-07-13 13:23:20
...

目前神经网络基本上都是基于计算图谱进行学习的,tensorfloat是基于静态图谱的,pytorch是基于动态图谱的。一张图可以看成是一张有向无环图,图中的节点可以分为不同的几种,而variable就是其中的一种。
torch都是用tensor进行计算的,而神经网络里边的参数都是variable变量的形式,而神经网络首先要做的就是变成variable类型。将tensor参数放到variable变量里边,神经网络优化的时候一般都是优化variable的节点,这样才能进行反向传播并且更新,实现网络的学习。

import torch
from torch.autograd import Variable

tensor = torch.FloatTensor([[1, 2], [3, 4]])
# 建立variable,第二个参数默认值为Flase
variable = Variable(tensor, requires_grad=Ture) # requires_grad参数是用来设定是否计算梯度以用于反向传播的
print(tensor)
print(variable)

pytorch学习(二)variable变量
我们输出这两个结果会发现这两个结果是差不多的,只是variable多了一个variable containing也就是说variable的data和tensor是一样的,只不过现在变成了variable类型的,是可以反向传播的,而tensor是不可以反向传播的。
下面我们对其进行一些运算看一下有没有什么变化和区别。

t_out = torch.mean(tensor*tensor
v_out = torch.mean(variable*variable)

pytorch学习(二)variable变量
计算之后的结果也没有什么太大的区别,只是variable可以进行反向传播。对其进行反向传播。

v_out.backward()  # 进行反向传播
print(variable.grad)

这里对v_out进行反向传播而打印的梯度是variable的,是因为这二者是在这一图中,是存在联系的,v_out的变化会影像variable,因此variable的梯度会产生变化,这也是神经网络学习时反向传播的原理。
variable的是Variable类型的,而variable.data是tensor的形式,是可以转化为numpy的。