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遍历zip文件输出名称时出现乱码问题的解决方法
Apr 08 Python
Python正则表达式完全指南
May 25 Python
Python 中pandas.read_excel详细介绍
Jun 23 Python
pandas将numpy数组写入到csv的实例
Jul 04 Python
实例讲解Python爬取网页数据
Jul 08 Python
django框架自定义用户表操作示例
Aug 07 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
python flask web服务实现更换默认端口和IP的方法
Jul 26 Python
PyCharm导入python项目并配置虚拟环境的教程详解
Oct 13 Python
Python如何给你的程序做性能测试
Jul 29 Python
Python Selenium实现无可视化界面过程解析
Aug 25 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&amp;java(三)
2006/10/09 PHP
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
PHP 记录访客的浏览信息方法
2018/01/29 PHP
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
2014/05/11 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
2014/11/26 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
javascript写一个ajax自动拦截并下载数据代码实例
2019/09/07 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
[45:46]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS DT
2014/05/23 DOTA
[04:31]2016国际邀请赛中国区预选赛妖精采访
2016/06/27 DOTA
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
python多线程编程中的join函数使用心得
2014/09/02 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
python3中property使用方法详解
2019/04/23 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
python代码xml转txt实例
2020/03/10 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
公司周年庆典标语
2014/10/07 职场文书
初中中等生评语
2014/12/29 职场文书
会计简历自我评价
2015/03/10 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server
tree shaking对打包体积优化及作用
2022/07/07 Java/Android