文章目录

  • 1.初识Variable
  • 2. 计算Variable的梯度
  • 3.获取 Variable 里面的数据

1.初识Variable

在 Torch 中的 Variable 就是一个存放会变化的值的地理位置. 里面的值会不停的变化. 就像一个裝鸡蛋的篮子, 鸡蛋数会不停变动. 那谁是里面的鸡蛋呢, 自然就是 Torch 的 Tensor . 如果用一个 Variable 进行计算, 那返回的也是一个同类型的 Variable.

我们定义一个 Variable:

import torch
from torch.autograd import Variable    # torch 中 Variable 模块tensor = torch.FloatTensor([[1,2],[3,4]])  #先生鸡蛋
variable = Variable(tensor,requires_grad = True) #把鸡蛋放到篮子里, requires_grad是参不参与误差反向传播, 要不要计算梯度print(tensor)
print(variable)

计算均值

import torch
from torch.autograd import Variable    # torch 中 Variable 模块tensor = torch.FloatTensor([[1,2],[3,4]])  #先生鸡蛋
variable = Variable(tensor,requires_grad = True) #把鸡蛋放到篮子里, requires_grad是参不参与误差反向传播, 要不要计算梯度t_out = torch.mean(tensor*tensor)
v_out = torch.mean(variable*variable)print(t_out)
print(v_out)

到目前为止, 我们看不出什么不同, 但是时刻记住, Variable 计算时, 它在背景幕布后面一步步默默地搭建着一个庞大的系统, 叫做计算图, computational graph. 这个图是用来干嘛的? 原来是将所有的计算步骤 (节点) 都连接起来, 最后进行误差反向传递的时候, 一次性将所有 variable 里面的修改幅度 (梯度) 都计算出来, 而 tensor 就没有这个能力啦.

2. 计算Variable的梯度

v_out = torch.mean(variable*variable) 就是在计算图中添加的一个计算步骤, 计算误差反向传递的时候有他一份功劳, 我们就来举个例子:

import torch
from torch.autograd import Variable    # torch 中 Variable 模块tensor = torch.FloatTensor([[1,2],[3,4]])  #先生鸡蛋
variable = Variable(tensor,requires_grad = True) #把鸡蛋放到篮子里, requires_grad是参不参与误差反向传播, 要不要计算梯度t_out = torch.mean(tensor*tensor)
v_out = torch.mean(variable*variable)print(t_out)
print(v_out)v_out.backward()     # 模拟 v_out 的误差反向传递
print(variable.grad)   # 初始 Variable 的梯度

3.获取 Variable 里面的数据

直接print(variable)只会输出 Variable 形式的数据, 在很多时候是用不了的(比如想要用 plt 画图), 所以我们要转换一下, 将它变成 tensor 形式.

print(variable)          #  Variable 形式
print(variable.data)     # tensor 形式
print(variable.data.numpy())   # numpy 形式

Pytorch——Variable是什么?相关推荐

  1. pytorch: Variable detach 与 detach_

    pytorch 的 Variable 对象中有两个方法,detach和 detach_ 本文主要介绍这两个方法的效果和 能用这两个方法干什么. detach 官方文档中,对这个方法是这么介绍的. 返回 ...

  2. PyTorch Variable与Tensor 【详解】

    Variable 与 Tensor tensor 是 PyTorch 中的完美组件,高效的数据格式,但是构建神经网络还远远不够,我们需要能够构建计算图的 tensor,这就是 Variable.Var ...

  3. 使用pytorch可视化中间层的结果

    摘要 一直比较想知道图片经过卷积之后中间层的结果,于是使用pytorch写了一个脚本查看,先看效果 这是原图,随便从网上下载的一张大概224*224大小的图片,如下 网络介绍 我们使用的VGG16,包 ...

  4. Style Transfer(PyTorch)

    Style Transfer-PyTorch Content Loss content loss用来计算原图片和生成的图片之间像素的差距,这里用的是卷积层获取的 feature map 之间的差距 通 ...

  5. TVM入门:TVM编译Pytorch模型工作流程

    TVM编译Pytorch模型工作流程 根据TVM参考文档整理,并添加了一些注释.该示例比较简单,适合学习TVM的同学入门阅读. TVM官方文档参考 0.导包 import tvm from tvm i ...

  6. pytorch triple-loss

    一.Triplet结构: triplet loss是一种比较好理解的loss,triplet是指的是三元组:Anchor.Positive.Negative: 整个训练过程是: 首先从训练集中随机选一 ...

  7. 可解释性神经网络(可视化):CAM/Grad-CAM pytorch相关代码

    目录 为什么神经网络要具有可解释性 前言 类激活图(CAM,class activation map),可视化 1.1 CAM的工作原理 2. 基于梯度的CAM(Grad-CAM) pytorch 实 ...

  8. Grad-CAM可视化

    目录 GradCam可视化ResNet50范例 GradCam可视化自定义的网络结构 pytorch中加载模型的方式: 不同项目工程集成了自己加载模型的方式 open-mmlab 加载模型结构 调用m ...

  9. grad-cam用于SSD目标检测

    参考链接: jacobgil/pytorch-grad-cam 代码: import torch import argparse import cv2 import numpy as np impor ...

最新文章

  1. c语言字符串去重简单,C语言实现简单飞机大战
  2. Android NDK开发——人脸检测与静默活体检测
  3. python获取渲染之后的网页_Phantomjs抓取渲染JS后的网页(Python代码)
  4. Vue.js的计算属性
  5. [Oracle] Data Pump 详细使用教程(5)- 命令交互模式
  6. 内存工作原理及发展历程
  7. CSS魔法堂:hasLayout原来是这样!
  8. java hibernate状态_Hibernate对象的三种状态
  9. 计算机系统建模与仿真论文,《系统建模与仿真》课程论文.pdf
  10. Visio 安装与操作小结
  11. 机器视觉硬件选型相关知识
  12. 无线路由器桥接完整教程(不会断网)【图文详解】
  13. linux 网络重组 分片 gso lro
  14. HDU - 1166 敌兵布阵(线段树模板)(入门题)
  15. H5横幅,旗帜飘动动画
  16. 第四次工业革命与龙的故事
  17. iOS高仿微信完整源码,网易爱玩APP源码等
  18. u盘怎么样在w ndows7上使用,用U盘给MAC BOOK AIR安装windows7系统
  19. 超级实用——用word与谷歌翻译将英文PDF文档翻译成中文,免费无限制之美
  20. 实验:使用SSMS创建并管理数据库及其基本表(代码版)

热门文章

  1. java编译器源码详解_已更新至第8章 | LLVM 编译框架详解
  2. java io密集型任务_IO密集型的线程池大小设置
  3. java ftc 68是什么意思_机器人比赛;FTC项目介绍与院校简介
  4. Servlet--HttpSession接口,HttpSessionContext接口,Cookie类
  5. 线性回归的从零开始实现-08-p3
  6. mysql5.7.76安装,win7下mysql5.7.17安装配置方法图文教程
  7. ES6 中的 Symbol 是什么?
  8. Linuxqt制作文本编辑器_Python实操!速收藏!学习使用Python创建文本编辑器应用程序
  9. java非负整数怎么设_使用JAVA将非负十进制整数n转换成b进制,递归方法与非递归方法...
  10. html——windows.onload()与$(document).ready()区别