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备份文件以及mysql数据库的脚本代码
Jun 10 Python
Python实现模拟时钟代码推荐
Nov 08 Python
python GUI实例学习
Nov 21 Python
python实现远程控制电脑
May 23 Python
python从list列表中选出一个数和其对应的坐标方法
Jul 20 Python
Python企业编码生成系统总体系统设计概述
Jul 26 Python
Python中调用其他程序的方式详解
Aug 06 Python
Win10下python 2.7与python 3.7双环境安装教程图解
Oct 12 Python
基于python判断目录或者文件代码实例
Nov 29 Python
Python 如何创建一个线程池
Jul 28 Python
在Python中字典按值排序的实现方法
Nov 12 Python
python 爬取华为应用市场评论
May 29 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正则提取或替换img标记属性
2013/06/26 PHP
小谈php正则提取图片地址
2014/03/27 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
JS对象转换为Jquery对象示例
2014/01/26 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
2015/10/10 Javascript
js格式化时间的方法
2015/12/18 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
Es6 Generator函数详细解析
2018/02/24 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
python列表的增删改查实例代码
2018/01/30 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
HTML5 drag和drop具体使用详解
2021/01/18 HTML / CSS
捷克时尚网上商店:OTTO
2018/03/15 全球购物
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
写好自荐信的几个要点
2013/12/26 职场文书
社区服务标语
2014/07/01 职场文书
企业授权委托书范本
2014/09/22 职场文书
官僚主义现象查摆问题整改措施
2014/10/04 职场文书
2014年小学体育工作总结
2014/12/11 职场文书
长江七号观后感
2015/06/11 职场文书
Java多条件判断场景中规则执行器的设计
2021/06/26 Java/Android