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中的文本处理
Apr 11 Python
Python中字典的基本知识初步介绍
May 21 Python
python3序列化与反序列化用法实例
May 26 Python
使用Python和xlwt向Excel文件中写入中文的实例
Apr 21 Python
python 将md5转为16字节的方法
May 29 Python
Flask框架各种常见装饰器示例
Jul 17 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
Dec 04 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 Python
tensorflow 实现数据类型转换
Feb 17 Python
如何搭建pytorch环境的方法步骤
May 06 Python
python的数学算法函数及公式用法
Nov 18 Python
python神经网络ResNet50模型
May 06 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与C#的值类型指向区别的详解
2013/05/21 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
PHP微信分享开发详解
2017/01/14 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
jQuery 表单验证扩展(四)
2010/10/20 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
js中this用法实例详解
2015/05/05 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
微信小程序图片轮播组件gallery slider使用方法详解
2018/01/31 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
[03:22]DOTA2超级联赛专访单车:找到属于自己的英雄
2013/06/08 DOTA
python实现的一个p2p文件传输实例
2014/06/04 Python
在Windows8上的搭建Python和Django环境
2014/07/03 Python
python基础教程之分支、循环简单用法
2016/06/16 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
Python反射用法实例简析
2017/12/22 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
python如何停止递归
2020/09/09 Python
美国祛痘、抗衰老药妆品牌:Murad
2016/08/27 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
c语言常见笔试题总结
2016/09/05 面试题
南京某公司笔试题
2013/01/27 面试题
EJB的角色和三个对象
2015/12/31 面试题
思想政治教育专业个人求职信范文
2013/12/20 职场文书
12岁生日感言
2014/01/21 职场文书
创先争优制度
2014/01/21 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python