解决torch.autograd.backward中的参数问题


Posted in Python onJanuary 07, 2020

torch.autograd.backward(variables, grad_variables=None, retain_graph=None, create_graph=False)

给定图的叶子节点variables, 计算图中变量的梯度和。 计算图可以通过链式法则求导。如果variables中的任何一个variable是 非标量(non-scalar)的,且requires_grad=True。那么此函数需要指定grad_variables,它的长度应该和variables的长度匹配,里面保存了相关variable的梯度(对于不需要gradient tensor的variable,None是可取的)。

此函数累积leaf variables计算的梯度。你可能需要在调用此函数之前将leaf variable的梯度置零。

参数:

variables(变量的序列) - 被求微分的叶子节点,即 ys 。

grad_variables((张量,变量)的序列或无) - 对应variable的梯度。仅当variable不是标量且需要求梯度的时候使用。

retain_graph(bool,可选) - 如果为False,则用于释放计算grad的图。请注意,在几乎所有情况下,没有必要将此选项设置为True,通常可以以更有效的方式解决。默认值为create_graph的值。

create_graph(bool,可选) - 如果为True,则将构造派生图,允许计算更高阶的派生产品。默认为False。

我这里举一个官方的例子

import torch
from torch.autograd import Variable
x = Variable(torch.ones(2, 2), requires_grad=True)
y = x + 2
z = y * y * 3
out = z.mean()
out.backward()#这里是默认情况,相当于out.backward(torch.Tensor([1.0]))
print(x.grad)

输出结果是

Variable containing:
 4.5000 4.5000
 4.5000 4.5000
[torch.FloatTensor of size 2x2]

解决torch.autograd.backward中的参数问题

接着我们继续

x = torch.randn(3)
x = Variable(x, requires_grad=True)

y = x * 2
while y.data.norm() < 1000:
  y = y * 2

gradients = torch.FloatTensor([0.1, 1.0, 0.0001])
y.backward(gradients)
print(x.grad)

输出结果是

Variable containing:
 204.8000
 2048.0000
  0.2048
[torch.FloatTensor of size 3]

这里这个gradients为什么要是[0.1, 1.0, 0.0001]?

如果输出的多个loss权重不同的话,例如有三个loss,一个是x loss,一个是y loss,一个是class loss。那么很明显的不可能所有loss对结果影响程度都一样,他们之间应该有一个比例。那么比例这里指的就是[0.1, 1.0, 0.0001],这个问题中的loss对应的就是上面说的y,那么这里的输出就很好理解了dy/dx=0.1*dy1/dx+1.0*dy2/dx+0.0001*dy3/dx。

如有问题,希望大家指正,谢谢_!

以上这篇解决torch.autograd.backward中的参数问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python操作gmail实例
Jan 14 Python
python实现网站的模拟登录
Jan 04 Python
Python计算两个日期相差天数的方法示例
May 23 Python
python中闭包Closure函数作为返回值的方法示例
Dec 17 Python
Python Json序列化与反序列化的示例
Jan 31 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
Aug 31 Python
python flask安装和命令详解
Apr 02 Python
linux中如何使用python3获取ip地址
Jul 15 Python
pycharm配置当鼠标悬停时快速提示方法参数
Jul 31 Python
python实现简易学生信息管理系统
Apr 05 Python
Pytorch maxpool的ceil_mode用法
Feb 18 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
Pytorch 中retain_graph的用法详解
Jan 07 #Python
PyTorch中的Variable变量详解
Jan 07 #Python
python enumerate内置函数用法总结
Jan 07 #Python
pytorch加载自定义网络权重的实现
Jan 07 #Python
Matplotlib绘制雷达图和三维图的示例代码
Jan 07 #Python
Pytorch 神经网络—自定义数据集上实现教程
Jan 07 #Python
浅谈Python访问MySQL的正确姿势
Jan 07 #Python
You might like
php在字符串中查找另一个字符串
2008/11/19 PHP
又一个php 分页类实现代码
2009/12/03 PHP
PHP用mysql数据库存储session的代码
2010/03/05 PHP
逆序二维数组插入一元素的php代码
2012/06/08 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
php单一接口的实现方法
2015/06/20 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
HTML DOM的nodeType值介绍
2011/03/31 Javascript
JQuery实现简单时尚快捷的气泡提示插件
2012/12/20 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
ES6新特性八:async函数用法实例详解
2017/04/21 Javascript
hammer.js实现图片手势放大效果
2017/08/29 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
详解小程序用户登录状态检查与更新实例
2019/05/15 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
jQuery实现增删改查
2020/12/22 jQuery
Python合并多个装饰器小技巧
2015/04/28 Python
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
教师节商场活动方案
2014/02/13 职场文书
cf收人广告词
2014/03/14 职场文书
四年级学生期末评语
2014/12/26 职场文书
朋友聚会开场白
2015/06/01 职场文书
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
2021/04/01 PHP
pytorch 使用半精度模型部署的操作
2021/05/24 Python
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang