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 性能优化方法小结
Mar 31 Python
Python语言生成水仙花数代码示例
Dec 18 Python
Python subprocess库的使用详解
Oct 26 Python
对python条件表达式的四种实现方法小结
Jan 30 Python
python 在某.py文件中调用其他.py内的函数的方法
Jun 25 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
python实现把二维列表变为一维列表的方法分析
Oct 08 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
详解pycharm2020.1.1专业版安装指南(推荐)
Aug 07 Python
python re模块常见用法例举
Mar 01 Python
Python加密与解密模块hashlib与hmac
Jun 05 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 进度条实现代码
2009/03/10 PHP
两千行代码的PHP学习笔记汇总
2014/10/05 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
PHP实现简单ajax Loading加载功能示例
2016/12/28 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
javascript的数据类型、字面量、变量介绍
2012/05/23 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
js下将阿拉伯数字每三位一逗号分隔(如:15000000转化为15,000,000)
2014/06/02 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
js以及jquery实现手风琴效果
2020/04/17 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
2018/07/25 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
python 统计列表中不同元素的数量方法
2018/06/29 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
Python控制键盘鼠标pynput的详细用法
2019/01/28 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
HTML5中的强制下载属性download使用实例解析
2016/05/12 HTML / CSS
汽车运用工程专业求职信
2014/06/18 职场文书
我的中国梦演讲稿400字
2014/08/19 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
pycharm debug 断点调试心得分享
2021/04/16 Python
手写Spirit防抖函数underscore和节流函数lodash
2022/03/22 Javascript
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL