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 del()函数用法
Mar 24 Python
Python计算三角函数之asin()方法的使用
May 15 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
Python高级特性与几种函数的讲解
Mar 08 Python
python字符串Intern机制详解
Jul 01 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
Sep 16 Python
Python argparse模块应用实例解析
Nov 15 Python
基于Python词云分析政府工作报告关键词
Jun 02 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 Python
python 中 .py文件 转 .pyd文件的操作
Mar 04 Python
Python异常类型以及处理方法汇总
Jun 05 Python
python实现简单聊天功能
Jul 07 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
《神奇女侠:血脉》神力女超人大战犯罪公司
2020/04/09 欧美动漫
PHP $_SERVER详解
2009/01/16 PHP
关于PHP语言构造器介绍
2013/07/08 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
JavaScript淡入淡出渐变简单实例
2015/08/06 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
ES6的新特性概览
2016/03/10 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
使用jQuery实现动态添加小广告
2017/07/11 jQuery
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
[01:05:40]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第三场
2014/05/24 DOTA
Python压缩和解压缩zip文件
2015/02/14 Python
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
Djang的model创建的字段和参数详解
2019/07/27 Python
基于Python爬取51cto博客页面信息过程解析
2020/08/25 Python
通过代码实例了解Python异常本质
2020/09/16 Python
利用python进行文件操作
2020/12/04 Python
python爬虫beautifulsoup解析html方法
2020/12/07 Python
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
新任教师自我鉴定
2014/02/24 职场文书
公司委托书范本
2014/04/04 职场文书
环保标语口号
2014/06/13 职场文书
本科生自荐信
2014/06/18 职场文书
敬老院标语
2014/06/27 职场文书
科学发展观活动总结
2014/08/28 职场文书
房地产置业顾问岗位职责
2015/04/11 职场文书
社区节水倡议书
2015/04/29 职场文书
开国大典观后感
2015/06/04 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL