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爬虫_自动获取seebug的poc实例
Aug 05 Python
Python制作词云的方法
Jan 03 Python
微信跳一跳python代码实现
Jan 05 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
Jul 06 Python
python按比例随机切分数据的实现
Jul 11 Python
python hash每次调用结果不同的原因
Nov 21 Python
python 使用shutil复制图片的例子
Dec 13 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
Jan 03 Python
Python如何将装饰器定义为类
Jul 30 Python
Pytho爬虫中Requests设置请求头Headers的方法
Sep 22 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
Jan 05 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数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
php生成年月日下载列表的方法
2015/04/24 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
2016/01/09 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
php+layui数据表格实现数据分页渲染代码
2019/10/26 PHP
javascript div 弹出可拖动窗口
2009/02/26 Javascript
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
JavaScript格式化数字的函数代码
2010/11/30 Javascript
javascript dom追加内容实现示例
2013/09/21 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
node.js处理前端提交的GET请求
2019/08/30 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
Python实现获取网站PR及百度权重
2015/01/21 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
pandas中去除指定字符的实例
2018/05/18 Python
使用Django连接Mysql数据库步骤
2019/01/15 Python
Django 自定义分页器的实现代码
2019/11/24 Python
如何使用repr调试python程序
2020/02/28 Python
Python MySQL 日期时间格式化作为参数的操作
2020/03/02 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
《社戏》教学反思
2014/04/15 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
2015年党总支工作总结
2015/05/25 职场文书
Python开发工具Pycharm的安装以及使用步骤总结
2021/06/24 Python