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单链表的简单实现方法
Sep 23 Python
Python实现pdf文档转txt的方法示例
Jan 19 Python
python numpy 显示图像阵列的实例
Jul 02 Python
对python中大文件的导入与导出方法详解
Dec 28 Python
浅谈python3中input输入的使用
Aug 02 Python
python文件读写代码实例
Oct 21 Python
Django实现网页分页功能
Oct 31 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 Python
解决Python Matplotlib绘图数据点位置错乱问题
May 16 Python
解决pytorch-gpu 安装失败的记录
May 24 Python
python+opencv实现视频抽帧示例代码
Jun 11 Python
Python中 range | np.arange | np.linspace三者的区别
Mar 22 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
paypal即时到账php实现代码
2010/11/28 PHP
PHP中的session安全吗?
2016/01/22 PHP
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
2013/08/28 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
Nodejs实现多文件夹文件同步
2018/10/17 NodeJs
解决layui下拉框监听问题(监听不到值的变化)
2019/09/28 Javascript
js实现简单的日历显示效果函数示例
2019/11/25 Javascript
vue内置组件keep-alive事件动态缓存实例
2020/10/30 Javascript
python django事务transaction源码分析详解
2017/03/17 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
python安装教程
2018/02/28 Python
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
自荐信的格式
2014/03/10 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
拆迁委托协议书
2014/09/15 职场文书
国际政治学专业推荐信
2014/09/26 职场文书
党支部四风整改方案
2014/10/25 职场文书
收银员岗位职责范本
2015/04/07 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
公司董事任命书
2015/09/21 职场文书
计算机实训心得体会
2016/01/14 职场文书
JavaScript实现显示和隐藏图片
2021/04/29 Javascript
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
Python编解码问题及文本文件处理方法详解
2021/06/20 Python
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS