Pytorch之Variable的用法


Posted in Python onDecember 31, 2019

1.简介

torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现

Variable和tensor的区别和联系

Variable是篮子,而tensor是鸡蛋,鸡蛋应该放在篮子里才能方便拿走(定义variable时一个参数就是tensor)

Variable这个篮子里除了装了tensor外还有requires_grad参数,表示是否需要对其求导,默认为False

Variable这个篮子呢,自身有一些属性

比如grad,梯度variable.grad是d(y)/d(variable)保存的是变量y对variable变量的梯度值,如果requires_grad参数为False,所以variable.grad返回值为None,如果为True,返回值就为对variable的梯度值

比如grad_fn,对于用户自己创建的变量(Variable())grad_fn是为none的,也就是不能调用backward函数,但对于由计算生成的变量,如果存在一个生成中间变量的requires_grad为true,那其的grad_fn不为none,反则为none

比如data,这个就很简单,这个属性就是装的鸡蛋(tensor)

Varibale包含三个属性:

data:存储了Tensor,是本体的数据 grad:保存了data的梯度,本事是个Variable而非Tensor,与data形状一致 grad_fn:指向Function对象,用于反向传播的梯度计算之用

代码1

import numpy as np
import torch
from torch.autograd import Variable
 
x = Variable(torch.ones(2,2),requires_grad = False)
temp = Variable(torch.zeros(2,2),requires_grad = True)
 
y = x + temp + 2
y = y.mean() #求平均数
 
y.backward() #反向传递函数,用于求y对前面的变量(x)的梯度
print(x.grad) # d(y)/d(x)

输出1

none

(因为requires_grad=False)

代码2

import numpy as np
import torch
from torch.autograd import Variable
 
x = Variable(torch.ones(2,2),requires_grad = False)
temp = Variable(torch.zeros(2,2),requires_grad = True)
 
 
y = x + temp + 2
y = y.mean() #求平均数
 
y.backward() #反向传递函数,用于求y对前面的变量(x)的梯度
print(temp.grad) # d(y)/d(temp)

输出2

tensor([[0.2500, 0.2500],
[0.2500, 0.2500]])

代码3

import numpy as np
import torch
from torch.autograd import Variable
 
x = Variable(torch.ones(2,2),requires_grad = False)
temp = Variable(torch.zeros(2,2),requires_grad = True)
 
 
y = x + 2
y = y.mean() #求平均数
 
y.backward() #反向传递函数,用于求y对前面的变量(x)的梯度
print(x.grad) # d(y)/d(x)

输出3

Traceback (most recent call last):
File "path", line 12, in <module>
y.backward()

(报错了,因为生成变量y的中间变量只有x,而x的requires_grad是False,所以y的grad_fn是none)

代码4

import numpy as np
import torch
from torch.autograd import Variable
 
x = Variable(torch.ones(2,2),requires_grad = False)
temp = Variable(torch.zeros(2,2),requires_grad = True)
 
 
y = x + 2
y = y.mean() #求平均数
 
#y.backward() #反向传递函数,用于求y对前面的变量(x)的梯度
print(y.grad_fn) # d(y)/d(x)

输出4

none

2.grad属性

在每次backward后,grad值是会累加的,所以利用BP算法,每次迭代是需要将grad清零的。

x.grad.data.zero_()

(in-place操作需要加上_,即zero_)

以上这篇Pytorch之Variable的用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
基于Python实现的百度贴吧网络爬虫实例
Apr 17 Python
python判断字符串编码的简单实现方法(使用chardet)
Jul 01 Python
13个最常用的Python深度学习库介绍
Oct 28 Python
Pyinstaller将py打包成exe的实例
Mar 31 Python
python提取具有某种特定字符串的行数据方法
Dec 11 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
Python turtle库绘制菱形的3种方式小结
Nov 23 Python
Python Tkinter Entry和Text的添加与使用详解
Mar 04 Python
python实现手势识别的示例(入门)
Apr 15 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
Jun 28 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 Python
pandas中关于apply+lambda的应用
Feb 28 Python
Pytorch 多块GPU的使用详解
Dec 31 #Python
Pyorch之numpy与torch之间相互转换方式
Dec 31 #Python
pytorch sampler对数据进行采样的实现
Dec 31 #Python
关于pytorch处理类别不平衡的问题
Dec 31 #Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 #Python
浅析Django中关于session的使用
Dec 30 #Python
使用pickle存储数据dump 和 load实例讲解
Dec 30 #Python
You might like
php 数组的指针操作实现代码
2011/02/08 PHP
php和javascript之间变量的传递实现代码
2012/12/19 PHP
PHP操作MongoDB GridFS 存储文件的详解
2013/06/20 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
js模拟实现烟花特效
2020/03/10 Javascript
原生javascript如何实现共享onload事件
2020/07/03 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
python合并文本文件示例
2014/02/07 Python
python版本的读写锁操作方法
2016/04/25 Python
python 调用HBase的简单实例
2016/12/18 Python
python正则表达式的使用
2017/06/12 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
基于python操作ES实例详解
2019/11/16 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
python中return如何写
2020/06/18 Python
英语自荐信常用语句
2013/12/13 职场文书
面试后感谢信怎么写
2014/02/01 职场文书
学校募捐倡议书
2014/05/14 职场文书
幼师辞职信范文
2015/02/27 职场文书
新闻通讯稿模板
2015/07/22 职场文书