pytorch学习(二)variable变量

目前神经网络基本上都是基于计算图谱进行学习的,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的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值