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)
我们输出这两个结果会发现这两个结果是差不多的,只是variable多了一个variable containing也就是说variable的data和tensor是一样的,只不过现在变成了variable类型的,是可以反向传播的,而tensor是不可以反向传播的。
下面我们对其进行一些运算看一下有没有什么变化和区别。
t_out = torch.mean(tensor*tensor
v_out = torch.mean(variable*variable)
计算之后的结果也没有什么太大的区别,只是variable可以进行反向传播。对其进行反向传播。
v_out.backward() # 进行反向传播
print(variable.grad)
这里对v_out进行反向传播而打印的梯度是variable的,是因为这二者是在这一图中,是存在联系的,v_out的变化会影像variable,因此variable的梯度会产生变化,这也是神经网络学习时反向传播的原理。
variable的是Variable类型的,而variable.data是tensor的形式,是可以转化为numpy的。
上一篇: 详解CapsNet
下一篇: 基于JDK1.7的HashMap源码详解