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中用get()方法获取字典键值的教程
May 21 Python
Python开发之快速搭建自动回复微信公众号功能
Apr 22 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
Python中getpass模块无回显输入源码解析
Jan 11 Python
详解Python循环作用域与闭包
Mar 21 Python
Python实现的ftp服务器功能详解【附源码下载】
Jun 26 Python
AUC计算方法与Python实现代码
Feb 28 Python
解决jupyter运行pyqt代码内核重启的问题
Apr 16 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
详解python的变量缓存机制
Jan 24 Python
python playwright 自动等待和断言详解
Nov 27 Python
python实现一个简单的贪吃蛇游戏附代码
Jun 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获取字符串的编码格式的方法(函数)
2013/06/21 PHP
初识Laravel
2014/10/30 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
JS 实现导航栏悬停效果
2013/09/23 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
利用js+css+html实现固定table的列头不动
2016/12/08 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
Vue resource三种请求格式和万能测试地址
2018/09/26 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
[01:07]2015国际邀请赛 中国区预选赛精彩回顾
2015/06/15 DOTA
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
Python通过正则表达式选取callback的方法
2015/07/18 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
2020/03/03 Python
python实现udp传输图片功能
2020/03/20 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
回门宴答谢词
2014/01/13 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
小学生节约用水倡议书
2014/05/15 职场文书
拔河比赛口号
2014/06/10 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js