Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果您在网络中间分离一个nn.module,那么在该模块之前是否所有模块都没有得到它们的梯度计算?

如果您在网络中间分离一个nn.module,那么在该模块之前是否所有模块都没有得到它们的梯度计算?
EN

Stack Overflow用户
提问于 2022-06-17 14:43:44
回答 1查看 210关注 0票数 0

假设我有一个输入和一个由A,net B和net C组成的序贯网络,如果我分离了B网,然后把X放到A->B->C中,因为B被分离了,我会失去A的梯度信息吗?我会假设没有?我假设它只是把B当作一个常数加到A的输出中,而不是一些可微性的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-18 01:18:33

TLDR;B上防止梯度计算不会停止对上游网络A的梯度计算。

我认为你认为“脱模”是有一些混淆的。在我看来,这类事情有三件事要记住:

  • 你可以用一个张量有效地把它从计算图中分离出来,也就是说,如果这个张量被用来计算另一个需要梯度的张量,反向传播步骤就不会通过这个“分离的”张量。

  • 以您描述“分离模型”的方式,您可以通过将requires_grad切换到其参数上的False来禁用在给定的网络层上的梯度计算。这可以用nn.Module.requires_grad_在模块级别的一行中完成。因此,在您的示例中,执行B.requires_grad_(False)将冻结B的参数,使其无法更新。换句话说,不会计算B参数的梯度,但是用于传播到A will的中间梯度!这里有一个极小的example:A = nn.Linear(10,10) >>> B= nn.Linear(10,10) >>> C= nn.Linear(10,10) #nn.Linear(10,10)#禁用梯度计算的B >>> B.requires_grad_(False) #虚拟输入、推理和反向传播>>> x= torch.rand(1,10,requires_grad=True) >>> C(B(A(X).mean().backward()

现在我们可以检查CA的梯度是否确实被正确地填充了:

A.weight.grad.sum()张量(0.3281) >>> C.weight.grad.sum()张量(-1.6335)

但是,当然,None.返回B.weight.grad

最后,

  • 的另一种行为是在使用no_grad上下文管理器时。这有效地杀死了梯度。如果使用like:yA = A(x) >>>和torch.no_grad():.yB = B(yA) >>> yC = C(yB)

在这里,network.已经脱离了yC

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72665429

复制
相关文章
WGCNA得到模块之后如何筛选模块里面的hub基因
通常是介绍到,把输入的top5000 MAD的基因根据WGCNA算法划分为多个模块,然后不同模块都可以去和临床形状看相关性。
生信技能树
2020/02/20
15K0
软件架构之前后端分离与前端模块化发展史
在现行的软件架构中,前端和后端是分离的,即前端只专注于页面渲染,而后台专注于业务逻辑,前端和后端是两个不同的工种,而前后端交互最常见的方式就是通过接口。
xiangzhihong
2022/11/30
1.3K0
在pytorch中停止梯度流的若干办法,避免不必要模块的参数更新
为什么我们要控制梯度流?这个答案有很多个,但是都可以归结为避免不需要更新的模型模块被参数更新。 我们在深度模型训练过程中,很可能存在多个loss,比如GAN对抗生成网络,存在G_loss和D_loss,通常来说,我们通过D_loss只希望更新判别器(Discriminator),而生成网络(Generator)并不需要,也不能被更新;生成网络只在通过G_loss学习的情况下,才能被更新。这个时候,如果我们不控制梯度流,那么我们在训练D_loss的时候,我们的前端网络Generator和CNN难免也会被一起训练,这个是我们不期望发生的。
狼啸风云
2021/03/30
7.7K0
在pytorch中停止梯度流的若干办法,避免不必要模块的参数更新
半小时学会 PyTorch Hook
提到 hook,我首先想起的是动画《小飞侠》里滑稽的 captain hook,满满童年的回忆促使我 P 了张题图:虎克船长勾着 PyTorch 的 logo。同时想起的还有大名鼎鼎的胡克定律:Hooke's law(虽然不是一个 hook),当年上物理实验课,看着弹簧测力计下面的钩子,联想到胡克被牛顿爵士打压的悲惨一生,不由发出既生胡何生牛的唏嘘……然而本文将介绍的是 PyTorch 中的 hook。
SIGAI学习与实践平台
2019/07/30
4.1K1
半小时学会 PyTorch Hook
PyTorch如何构建和实验神经网络
在本文中,将展示一个简单的分步过程,以在PyTorch中构建2层神经网络分类器(密集连接),从而阐明一些关键功能和样式。
代码医生工作室
2019/12/02
8180
还不会使用PyTorch框架进行深度学习的小伙伴,看过来
今年初,Facebook 推出了 PyTorch 1.0,该框架集成了谷歌云、AWS 和 Azure 机器学习。学习本教程之前,你需要很熟悉 Scikit-learn,Pandas,NumPy 和 SciPy。这些程序包是使用本教程的重要先决条件。
机器之心
2018/12/21
1.6K0
【PyTorch】PyTorch如何构建和实验神经网络
在本文中,将展示一个简单的分步过程,以在PyTorch中构建2层神经网络分类器(密集连接),从而阐明一些关键功能和样式。
lujohn3li
2020/03/03
1K0
【PyTorch】PyTorch如何构建和实验神经网络
LeetCode 5967. 检查是否所有 A 都在 B 之前
给你一个 仅 由字符 'a' 和 'b' 组成的字符串 s 。 如果字符串中 每个 ‘a’ 都出现在 每个 ‘b’ 之前,返回 true ;否则,返回 false 。
Michael阿明
2022/01/07
3230
java——推断日期是否在今天之前
这里说的日期是指字符串的日期格式,如“2014-10-15”,我们要推断这个日期是否在今天之前,网上看到好多推断的方法,都是拿这个日期转换成Date对象 然后与new Date()比較,使用comparetTo() 或者before()方法,事实上这样做都会有点小问题,这样做忽略了一个小时分钟的比較,会出现错误,得不到正确的结果。
全栈程序员站长
2022/07/08
2.1K0
在PetaLinux工程中导出所有关键模块代码
PetaLinux工程会自动下载代码并编译。很多时候,工程师需要修改代码,加入调试信息。使用下列脚本,可以一次性导出所有关键模块的代码。 脚本中,为了保持兼容性,导出了MPSoC和Versal的模块。有些模块不存在,不会导致其它副作用,请忽略不存在的模块错误信息。
hankfu
2022/11/14
6950
网络模块封装
6、网络模块封装 网络模块的选择 选择一: 传统的Ajax是基于XMLHttpRequest(XHR) 为什么不用它呢? 非常好解释, 配置和调用方式等非常混乱. 编码起来看起来就非常蛋疼. 所以真实
Qwe7
2022/05/31
2540
【Pytorch 】笔记八:Tensorboard 可视化与 Hook 机制
疫情在家的这段时间,想系统的学习一遍 Pytorch 基础知识,因为我发现虽然直接 Pytorch 实战上手比较快,但是关于一些内部的原理知识其实并不是太懂,这样学习起来感觉很不踏实,对 Pytorch 的使用依然是模模糊糊,跟着人家的代码用 Pytorch 玩神经网络还行,也能读懂,但自己亲手做的时候,直接无从下手,啥也想不起来, 我觉得我这种情况就不是对于某个程序练得不熟了,而是对 Pytorch 本身在自己的脑海根本没有形成一个概念框架,不知道它内部运行原理和逻辑,所以自己写的时候没法形成一个代码逻辑,就无从下手。这种情况即使背过人家这个程序,那也只是某个程序而已,不能说会 Pytorch,并且这种背程序的思想本身就很可怕, 所以我还是习惯学习知识先有框架(至少先知道有啥东西)然后再通过实战(各个东西具体咋用)来填充这个框架。而「这个系列的目的就是在脑海中先建一个 Pytorch 的基本框架出来,学习知识,知其然,知其所以然才更有意思 ;)」。
阿泽 Crz
2020/09/04
2.1K0
【Pytorch 】笔记八:Tensorboard 可视化与 Hook 机制
PyTorch 深度学习实用指南:1~5
目前,有数十种深度学习框架可以解决 GPU 上的任何种类的深度学习问题,那么为什么我们还需要一个呢? 本书是对这一百万美元问题的解答。 PyTorch 进入了深度学习家族,并有望成为 GPU 上的 NumPy。 自加入以来,社区一直在努力兑现这一承诺。 如官方文档所述,PyTorch 是针对使用 GPU 和 CPU 进行深度学习的优化张量库。 尽管所有著名的框架都提供相同的功能,但 PyTorch 相对于几乎所有框架都具有某些优势。
ApacheCN_飞龙
2023/04/27
2.1K0
什么是TypeScript模块?为啥那么重要?
在软件开发中,模块是一种组织和管理代码的方式。模块化可以将复杂的程序拆分为互相独立且可重用的部分,以便更好地组织代码、降低耦合性、增加可维护性和可扩展性。TypeScript 提供了丰富的模块功能,使得开发者可以更加方便地使用模块化思想来构建和组织自己的代码。本文将详细介绍 TypeScript 中的模块概念、模块的使用方法以及一些常见的模块模式。
网络技术联盟站
2023/07/06
4050
如何使用 PyTorch Hook
Hook 实际上在软件工程中相当常见,并不是 PyTorch 所独有的。一般来说,“hook”是在特定事件之后自动执行的函数。在现实世界中,你可能遇到过的一些 hook 的例子:
McGL
2020/11/10
9860
什么是千兆光模块和万兆光模块?它们有什么区别?
众所周知千兆光模块和万兆光模块的主区别在于它们的传输速率不一样,那你还知道千兆光模块和万兆光模块的其他区别吗?接下来海翎光电的小编将对千兆光模块和万兆光模块的区别进行详细解析。
武汉利又德
2023/02/07
1.6K0
什么是千兆光模块和万兆光模块?它们有什么区别?
卷积神经网络学习路线(十八) | Google CVPR 2018 MobileNet V2
紧接着上篇的MobileNet V1,Google在2018年的CVPR顶会上发表了MobileNetV2,论文全称为《MobileNetV2: Inverted Residuals and Linear Bottlenecks》,原文地址见附录。
BBuf
2020/02/21
9890
卷积神经网络学习路线(十八) | Google CVPR 2018 MobileNet V2
PyTorch专栏(十七): 使用PyTorch进行深度学习
深度学习表现为使用更巧妙的方法将线性函数和非线性函数进行组合。非线性函数的引入使得训练出来的模型更加强大。在本节中,我们将学习这些核心组件,建立目标函数,并理解模型是如何构建的。
磐创AI
2019/10/18
1K0
Pytorch Debug指南:15条重要建议
在使用Pytorch时你或多或少会遇到各种bug,为了缓解你的痛苦😢,本文将对常见的错误进行解释,并说清楚来龙去脉。 细节就是魔鬼,虽然代码不报错但还是可能会对精度带来影响。如果本文对你有帮助,请收藏&转发! CrossEntropyLoss和NLLLoss 最常见的错误是损失函数和输出激活函数之间的不匹配。nn.CrossEntropyLossPyTorch中的损失模块执行两个操作:nn.LogSoftmax和nn.NLLLoss。 因此nn.CrossEntropyLossPyTorch的输入应该是
AI算法与图像处理
2021/09/06
1.5K0
点击加载更多

相似问题

如果Python包只是一个模块,那么该模块可以从姐妹模块导入并公开它们的功能吗?

10

如果从另一个模块调用该模块,而不是从其本身调用该模块,那么为什么突变模块要更新该引用?

21

在Python模块中隐藏中间计算

53

如果我没有使用某些模块,那么是否必须使用通配符10.1.0 standalone.xml中的所有模块?

12

在导入模块之前测试类是否在模块中

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文