pytorch的backward参数

首先,如果out.backward()中的out是一个标量的话(相当于一个神经网络有一个样本,这个样本有两个属性,神经网络有一个输出)那么此时我的backward函数是不需要输入任何参数的。

    

运行结果:

   

不难看出,我们构建了这样的一个函数:

     

所以其求导也很容易看出:

    

这是对其进行标量自动求导的结果


 

如果out.backward()中的out是一个向量(或者理解成1xN的矩阵)的话,我们对向量进行自动求导,看看会发生什么?

先构建这样的一个模型(相当于一个神经网络有一个样本,这个样本有两个属性,神经网络有两个输出):

    

模型也很简单,不难看出out求导出来的雅克比应该是:

   ,因为a1 = 2,a2 = 4,所以上面的矩阵应该是  

运行的结果:

   

嗯,的确是8和96,但是仔细想一想,和咱们想要的雅克比矩阵的形式也不一样啊。难道是backward自动把0给省略了?

咱们继续试试,这次在上一个模型的基础上进行小修改,如下:

   

可以看出这个模型的雅克比应该是:

   

运行一下,看是不是:

   

等等,什么鬼?正常来说不应该是  [ [ 8 , 2 ] , [ 2 , 96 ] ]么?

我是谁?我再哪?

为什么就给我2个数,而且是  8 + 2 = 10 ,96 + 2 = 98 。难道都是加的 2 ?

想一想,刚才咱们backward中传的参数是 [ [ 1 , 1 ] ],难道安装这个关系对应求和了?

咱们换个参数来试一试,程序中只更改传入的参数为[ [ 1 , 2 ] ]:

   

运行一下:

  

嗯,这回可以理解了,我们传入的参数,是对原来模型正常求导出来的雅克比矩阵进行线性操作,可以把我们传进的参数(设为arg)看成一个列向量,那么我们得到的结果就是(注意这里是矩阵乘法,为了好表示我用了*):

   ( Jacobi * arg )T

在这个题里,我们得到的实际是:

 

看起来一切完美的解释了,但是就在我刚刚打字的一刻,我意识到官方文档中说k.backward()传入的参数应该和k具有相同的维度,所以如果按上述去解释是解释不通的。

哪里出问题了呢?

仔细看了一下,原来是这样的:在对雅克比矩阵进行线性操作的时候,应该把我们传进的参数(设为arg)看成一个行向量(不是列向量),那么我们得到的结果就是(注意这里是矩阵乘法,为了好表示我用了*):

    ( arg * Jacobi )T

   

 这回我们就解释的通了。

现在我们来输出一下雅克比矩阵吧,为了不引起歧义,我们让雅克比矩阵的每个数值都不一样(一开始分析错了就是因为雅克比矩阵中有相同的数据),所以模型小改动如下:

如果没问题的话咱们的雅克比矩阵应该是 [ [ 8 , 2 ] , [ 4 , 96 ] ]

好了,下面是见证奇迹的时刻了,不要眨眼睛奥,千万不要眨眼睛......

好了,现在总结一下:因为经过了复杂的神经网络之后,out中每个数值都是由很多输入样本的属性(也就是输入数据)线性或者非线性组合而成的,那么out中的每个数值和输入数据的每个数值都有关联,也就是说【out】中的每个数都可以对【a】中每个数求导,那么我们backward()的参数[k1,k2,k3....kn]的含义就是:

   

也可以理解成每个out分量对an求导时的权重。


现在,如果out是一个矩阵呢?

下面的例子也可以理解为:相当于一个神经网络有两个样本,每个样本有两个属性,神经网络有两个输出.

      

如果前面的例子理解了,那么这个也很好理解,backward输入的参数k是一个2x1的矩阵,2代表的就是样本数量,就是在前面的基础上,再对每个样本进行加权求和。

结果是:

      

如果有兴趣,也可以拓展一下多个样本的多分类问题,猜一下k的维度应该是【输入样本的个数 X 分类的个数】

好啦,纠结我好久的pytorch自动求导原理算是彻底搞懂啦~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#表格文字多收缩样式

C#表格文字多收缩样式 <style>.divOpen {height: 24px;overflow: hidden;} </style> ----------------- var html <div class"divOpen" οnclick"divClick(this)" style"cursor: pointer; min-width:100px;">;html value;ht…

意识的哲学、生理及智能属性研究

来源&#xff1a;人机与认知实验室摘要&#xff1a;意识问题一直是各个领域最棘手的难题。本文将从意识的哲学属性、意识的脑属性和意识的智能属性三个角度&#xff0c;分别研究意识研究领域中主要观点与所遇困境&#xff0c;并在文章最后介绍目前已有的意识理论与模型。关键字…

ROS 学习笔记(二):自定义消息msg+Publisher+Subscriber 示例运行

ROS 学习笔记&#xff08;二&#xff09;&#xff1a;自定义消息msgPublisherSubscriber 示例运行 一、自定义消息&#xff1a; 1.新建msg文件夹&#xff0c;创建定义Person.msg 文件 mkdir -p ~/catkin_ws/src/mypackage/msg cd ~/catkin_ws/src/mypackage/msg touch Perso…

latex中手动输入每一条参考文献

一般模板都会给出参考文献的格式&#xff0c;如果用latex的bib方法不能生成模板所需的格式&#xff0c;那么就需要自己手动输入每一条参考文献。其实这也不难&#xff0c;问题主要在期刊的缩写&#xff0c;查找某一篇文献期刊名缩写的一种方法是在谷歌学术搜索该文献&#xff0…

网址学习

http://aspnet.codeplex.com 转载于:https://www.cnblogs.com/ChineseMoonGod/p/5135376.html

美国反垄断调查背后,硅谷科技巨头不为人知的“阴暗面”

来源&#xff1a;军工圈6月4日&#xff0c;美国众议院司法机构小组委员会负责人向媒体证实&#xff0c;美国政府准备对亚马逊、苹果、Facebook和谷歌4大科技巨头进行反垄断调查。据称&#xff0c;执行反垄断法的美国联邦贸易委员会&#xff08;以下简称FTC&#xff09;和美国司…

ROS 学习笔记(三):自定义服务数据srv+server+client 示例运行

ROS 学习笔记&#xff08;三&#xff09;&#xff1a;自定义服务数据srvServerClient 示例运行 一、自定义服务数据&#xff1a; 1.向功能包添加自定义服务文件(AddTwoInts.srv) cd ~/catkin_ws/src/mypackage mkdir srv cd srv2.生成并编辑自定义服务文件&#xff1a; ge…

第十一章 AtomicInteger源码解析

1、原子类 可以实现一些原子操作基于CAS下面就以AtomicInteger为例。 2、AtomicInteger 在没有AtomicInteger之前&#xff0c;对于一个Integer的线程安全操作&#xff0c;是需要使用同步锁来实现的&#xff0c;当然现在也可以通过ReentrantLock来实现&#xff0c;但是最好最方便…

np.random.choice用法

numpy.random.choice(a, sizeNone, replaceTrue, pNone) 返回&#xff1a;从[0,a)中以概率p采样size个数&#xff0c;replacement 代表的意思是抽样之后还放不放回去 如&#xff1a; >>> np.random.choice(5, 3) array([0, 3, 4]) >>> np.random.choice…

趋势 | 2019年人工智能行业的25大趋势

来源&#xff1a;网易智能知名创投研究机构CB Insights调研了25种最大的AI趋势&#xff0c;以确定2019年该技术的下一步趋势&#xff0c;他们根据行业采用率和市场优势评估了每种趋势&#xff0c;并将其归类为必要、实验性、威胁性、暂时的。1胶囊网络将挑战最先进的图像识别算…

ubuntu18.04 Qt Creator 安装+ROS Qt Creator Plug-in 插件安装笔记

ubuntu18.04 Qt Creator 安装ROS Qt Creator Plug-in 插件安装笔记&#xff1a; 一、Qt Creator 5.10安装 官网下载地址&#xff1a; http://download.qt.io/archive/qt/ 参考博客&#xff1a; https://blog.csdn.net/wuweifeng_2017/article/details/78322249 QT 安装包下…

.NET通过NavisWorks API将.nwc文件在窗口中打开及交互

[ 本文原创发表于cnblogs ] NavisWorks API的内容大部分为二次开发&#xff0c;在NavisWorks软件中增加所需要的功能。 而我所接到的工作任务是&#xff0c;将.nwc等格式的文件通过窗口打开并且可交互。也就是说&#xff0c;需要有一个程序去调用API&#xff0c;从而打开NavisW…

工业视觉系统相关知识和选型介绍(一):相机篇

工业视觉系统相关知识和选型介绍&#xff08;一&#xff09;&#xff1a;相机篇一、工业视觉系统二、工业相机三、关键名词解释四、工业相机选型五、工业相机品牌六、相机选型实例一、工业视觉系统 1.机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是指通过机器视觉…

天冷了思绪也飞远了

近日天冷&#xff0c;扎了有些时日的马尾&#xff0c;我的内心开始犹豫&#xff0c;要不要把它披散下来后稍作修剪&#xff0c;然后做成天然的围脖来保暖呢&#xff1f;不由得回想起多年的理发经历&#xff0c;其中中学的那一次理发仍然记忆犹新...... 常 言道&#xff0c;身体…

终于看见光的速度了:每秒一万亿帧的相机,拍摄到光的运行状态!

来源&#xff1a;机械发明爱好者我是谁&#xff0c;我在哪&#xff0c;我看到了什么&#xff0c;不会是手电筒照射的吧&#xff08;光移动的时候是在标签里面的&#xff0c;所以不可能是手电筒照射的&#xff09;。这个就是传说的中的飞秒拍摄技术飞秒&#xff08;femtosecond&…

win10下TensorFlow-GPU安装(GTX1660+CUDA10+CUDNN7.4)

首先安装anaconda Anaconda下载地址&#xff1a;https://www.anaconda.com/download/ 注意在安装时勾上第一项&#xff1a; 安装CUDA10.0&#xff1a; CUDA下载地址&#xff1a;https://developer.nvidia.com/cuda-toolkit-archive 安装CUDA前会先运行一个系统检查&#xff…

工业视觉系统相关知识和选型介绍(二):镜头篇

工业视觉系统相关知识和选型介绍&#xff08;二&#xff09;&#xff1a;镜头篇一、工业镜头介绍二、 关键名词解释二、图解镜头基本参数三、镜头选型四、常用工业镜头品牌一、工业镜头介绍 镜头的基本功能就是实现光束变换&#xff08;调制&#xff09;&#xff0c;在机器视觉…

《科学美国人》评出2019年十大突破性技术

来源&#xff1a;科技日报日前&#xff0c;著名科普杂志《科学美国人》公布了2019年十大突破性技术榜单。榜上有名的既有“高深莫测”的新型核反应堆和DNA存储&#xff0c;也有“平易近人”的新型肥料和食品包装。科技日报记者梳理后发现&#xff0c;这十大技术可分为清洁环境、…

破解百度云

BaiduPCS-Go 打开登录即可使用&#xff0c;这个是论坛大神基于BaiduPCS-Go制作的web版。 这是原贴地址https://www.52pojie.cn/thread-808876-1-1.html 谢谢大神将复杂简单化。&#xff08;不清楚360有没有报毒&#xff0c;有需要的自行测试。&#xff09;下载地址&#xff1a…