一、Variable是什么?

在torch中的Variable就是一个存放会变化的值的地理位置,里面的值会不断的变化。就像是一个装鸡蛋的篮子,里面的鸡蛋数会不停变动。就是torch里面的tensor会不断的变化,如果用Variable进行计算,那么返回的也是同一类型的Variable。

import torch
from torch.autograd import Variable#鸡蛋
tensor=torch.FloatTensor([[1,2],[3,4]])
#将鸡蛋放进篮子,requries_grad是参与不参与误差反向传播,要不要计算梯度
variable=Variable(tensor,requires_grad=True) #variable中包含着tensor的值,variable不是tensor
print(tensor)
print(variable)

运行结果:

tensor([[1., 2.],[3., 4.]])
tensor([[1., 2.],[3., 4.]], requires_grad=True)

如果variable=Variable(tensor)或者将requires_grad设置为False,即不参与误差反向传播,那么运行结果variable和tensor是一样的。

二、Variable 计算,梯度

  • 对比一下tensor和Variable中的计算有什么区别
#tensor和Variable的数学运算对比
t_mean=torch.mean(tensor*tensor)   #tensor*tensor=tensor^2
v_mean=torch.mean(variable*variable)
print(t_mean)
print(v_mean)

运行结果:

tensor(7.5000)
tensor(7.5000, grad_fn=<MeanBackward0>)

tensor和Variable中的数学计算看不出很大的区别。但是Variable计算时,它在后面一步步默默地搭建着一个庞大的系统,叫做计算图(computational graph)。这个图是用来将所有的计算步骤(节点)都连接起来,最后进行误差反向传播的时候,一次性将所有variable里面的梯度都计算出来,而tensor就没有这种能力了。

v_mean=torch.mean(variable*variable)就是在计算图(computational graph)中添加的一个计算步骤。

  • 计算梯度
#计算梯度
v_mean.backward()   #模拟v_mean的误差反向传播
#Variable是计算图中的一部分,可以用来传递误差。
#前面步骤中的v_mean=torch.mean(variable*variable)就是  v_mean=1/4*sum(variable^2)
#v_mean的梯度就是:d(v_mean)/d(variable)=1/4*2*variable=1/2*variable,就是v_mean对variable求导数的过程
v_grad=variable.grad   #初始Variable的梯度
print(v_grad)   #初始Variable的梯度

运行结果:

tensor([[0.5000, 1.0000],[1.5000, 2.0000]])

三、获取Variable中的数据

Variable中装着tensor数据,如果print(variable)会输出Variable形式的数据,在很多时候是用不了的(比如用matplotlib画图的时候),所以需要转化。

#获取variable中的数据
print(variable)              #Variable形式
print(variable.data)         #tensor形式
print(variable.data.numpy()) #numpy形式,Variable形式是无法直接转换为numpy的

运行结果:

tensor([[1., 2.],[3., 4.]], requires_grad=True)
tensor([[1., 2.],[3., 4.]])
[[1. 2.][3. 4.]]

忽略上边的梯度计算部分,如果数据不参与误差反向传播,也就是刚开始的时候variable=Variable(tensor[,requires_grad=False]),则输出的variable也是tensor数据,就可以直接使用variable.numpy(),无需variable.data.numpy。因为Variable中之后tensor数据,没设置别的属性,所以说可以这么用。

但是为了防止代码出现错误,最好还是使用variable.data.numpy()的形式。

pytorch学习笔记2--Variable变量相关推荐

  1. Pytorch学习笔记总结

    往期Pytorch学习笔记总结: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 Pytorch系列目录: PyTorch学习笔记( ...

  2. 莫烦pytorch学习笔记5

    莫烦pytorch学习笔记5 1 自编码器 2代码实现 1 自编码器 自编码,又称自编码器(autoencoder),是神经网络的一种,经过训练后能尝试将输入复制到输出.自编码器(autoencode ...

  3. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  4. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  5. 深度学习入门之PyTorch学习笔记:卷积神经网络

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 4.1 主要任务及起源 4.2 卷积神经网络的原理和结构 4.2.1 卷积层 1. ...

  6. 深度学习入门之PyTorch学习笔记:多层全连接网络

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 3.1 PyTorch基础 3.2 线性模型 3.2.1 问题介绍 3.2.2 一维线性回归 3.2 ...

  7. 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码

    吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...

  8. PyTorch学习笔记(七):PyTorch可视化

    PyTorch可视化 往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本系列目录: PyTorch学习笔记(一) ...

  9. PyTorch学习笔记(五):模型定义、修改、保存

    往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本系列目录: PyTorch学习笔记(一):PyTorch环境安 ...

  10. PyTorch学习笔记(四):PyTorch基础实战

    PyTorch实战:以FashionMNIST时装分类为例: 往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本 ...

最新文章

  1. 轻松破解NewzCrawler时间限制
  2. React Native 项目常用第三方组件汇总
  3. 二十一、SPI设备驱动及应用(二)
  4. 全国计算机等级考试题库二级C操作题100套(第08套)
  5. 牛客网NOIP赛前集训营-提高组(第六场)B-选择题[背包]
  6. 腾讯3轮面试都问了Android事件分发,原理+实战+视频+源码
  7. AutoCompleteTextView组件的功能和用法
  8. Java实现词频统计(Wordcount)-Map或Hashtable的value排序
  9. ajax提交整个form表单
  10. 60-320-040-使用-去重-HyperLogLog 去重计数
  11. CWP中的排序算法:C语言
  12. linux字符模式分辨率grub2,Deepin 15.8系统Grub菜单分辨率低的原因及解决方案
  13. C#通过字符串分割字符串Split
  14. iPhone 竟没人要了?
  15. 关于uuid与自增列的选择
  16. 收藏里的文档web service说明
  17. .NET 中的对象序列化
  18. 面试题心得--spring注解的原理
  19. Python实现英文词频统计:以hamlet为例
  20. 蓝桥杯学习——递归问题(上楼梯)

热门文章

  1. SQL基础系列(一)——基本概念
  2. vr虚拟旅游:躺在自家的沙发上“来一场说走就走”的旅行
  3. python qq邮箱的SMTP服务器需要身份验证
  4. 不喝酒的人和经常喝酒的人,身体上有何差别?为啥有人不肯戒酒?
  5. 实习面试:一天内时针和分针能相遇几次?
  6. tui-editor(富文本编辑器插件)安装报错处理方法
  7. 【Kafka】在Kafka和ZK“分手”之前,来看看Kafka在ZK中到底保存了什么
  8. 求1000的阶乘c语言编程,[原创] 1000的阶乘的程序代码,好题大家分享
  9. sat数学可以用计算机吗,SAT数学考试计算器使用方法
  10. 自然语言处理数据集集锦(持续更新ing...)