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 相关文章推荐
数据挖掘之Apriori算法详解和Python实现代码分享
Nov 07 Python
python列表的增删改查实例代码
Jan 30 Python
python 删除指定时间间隔之前的文件实例
Apr 24 Python
Python使用一行代码获取上个月是几月
Aug 30 Python
python2与python3的print及字符串格式化小结
Nov 30 Python
Python3 log10()函数简单用法
Feb 19 Python
Python中字符串与编码示例代码
May 20 Python
基于Python批量生成指定尺寸缩略图代码实例
Nov 20 Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 Python
Python 利用flask搭建一个共享服务器的步骤
Dec 05 Python
Python爬虫爬取ts碎片视频+验证码登录功能
Feb 22 Python
Python测试框架pytest高阶用法全面详解
Jun 01 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
检查用户名是否已在mysql中存在的php写法
2014/01/20 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
2015/04/27 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
进阶之初探nodeJS
2017/01/24 NodeJs
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
react-native 封装选择弹出框示例(试用ios&amp;android)
2017/07/11 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
Python中3种内建数据结构:列表、元组和字典
2014/11/30 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
python发送告警邮件脚本
2018/09/17 Python
Python发展史及网络爬虫
2019/06/19 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
python的命名规则知识点总结
2019/10/04 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
如何将PySpark导入Python的放实现(2种)
2020/04/26 Python
Python执行时间的几种计算方法
2020/07/31 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
网络安全方面的面试题
2016/01/07 面试题
物流仓管员工作职责
2014/01/06 职场文书
一年级学生期末评语
2014/04/21 职场文书
关于雷锋的演讲稿
2014/05/10 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
医疗器械售后服务承诺书
2014/05/21 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
平安建设汇报材料
2014/12/29 职场文书
雨中的树观后感
2015/06/03 职场文书
中学后勤工作总结2015
2015/07/22 职场文书
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL