解决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冒泡排序算法的实现代码
Nov 21 Python
python内置函数:lambda、map、filter简单介绍
Nov 16 Python
python中的常量和变量代码详解
Jul 25 Python
树莓派实现移动拍照
Jun 22 Python
Django实现分页显示效果
Oct 31 Python
解决python web项目意外关闭,但占用端口的问题
Dec 17 Python
python 实现从高分辨图像上抠取图像块
Jan 02 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
Python判断三段线能否构成三角形的代码
Apr 12 Python
Python 多线程共享变量的实现示例
Apr 17 Python
opencv 实现特定颜色线条提取与定位操作
Jun 02 Python
Sentry的安装、配置、使用教程(Sentry日志手机系统)
Jul 23 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
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
php操作mysql数据库的基本类代码
2014/02/25 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
2014/06/12 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
javascript入门·动态的时钟,显示完整的一些方法,新年倒计时
2007/10/01 Javascript
Firefox outerHTML实现代码
2009/06/04 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
select标签模拟/美化方法采用JS外挂式插件
2013/04/01 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
jQuery中内容过滤器简单用法示例
2018/03/31 jQuery
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
通过实例解析js简易模块加载器
2019/06/17 Javascript
基于python中的TCP及UDP(详解)
2017/11/06 Python
如何用python整理附件
2018/05/13 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
惠而浦美国官网:Whirlpool.com
2021/01/19 全球购物
点菜员岗位职责范本
2014/02/14 职场文书
统计岗位职责
2014/02/21 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
英文升职感谢信
2015/01/23 职场文书
高一军训感想
2015/08/07 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
浅谈Go语言多态的实现与interface使用
2021/06/16 Golang
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android