关于RNN (循环神经网络)相邻采样为什么在每次迭代之前都需要将参数detach

news/2025/1/22 10:55:51/文章来源:https://www.cnblogs.com/gongzb/p/18685280

转自:https://www.cnblogs.com/catnofishing/p/13287322.html

  • detach到底有什么作用呢

    首先要明确一个意识:pytorch是动态计算图,每次backward后,本次计算图自动销毁,但是计算图中的节点都还保留。

    ​ 方向传播直到叶子节点为止,否者一直传播,直到找到叶子节点

    我的答案是有用,但根本不是为了防止梯度开销过大(注释真的害人不浅啊),detach的真正作用是梯度节流,防止反向传播传播到隐藏状态时,因为上次小批量方向传播计算图的销毁导致继续向下传播而引起报错。啥意思呢,我以连续两次小批量迭代举例:

    第一次小批量迭代,H0 是叶子节点,因为他没经过任何计算。剩余H1是非叶子节点。在第一次方向传播后,第一次的计算图已经销毁,但是节点数据仍然存在。

    第二次小批量迭代,第一次批量迭代的最后时间节点的隐藏状态H2 成为第二批次小的初始隐藏状态( H0(第二次) = H2(第一次) ),这样第二次在方向传播时,当传播到H0时,发现H0 是 分支节点(grad_fn+requires_grad) ,就会继续向下传播直到找到叶子节点为止,但是可惜的是H0 之后的计算图(即第一次小批量的计算图)已经销毁,传播发生中断,因此就会导致出错。而使用detach之后,H0 自然与上次的计算图没有任何关系,H0自身变为叶子节点,这样传播到H0时自然就结束了。

    image-20200712092715508

    好了,验证我所说的吧。

    • 首先,不使用detach,会导致传播报错

    将detach 操作删除

    image-20200712093904952

    运行结果:

    image-20200712093955090

看到没,第二次在方向传播时出错了吧

  • 使用detach,防止出错,并使H0 变为叶子节点

    代码更改如下:

    image-20200712094214574

结果:全是true

image-20200712094233502

综上:detach在这里作用,大家明白不,喜欢点个赞!!!!

至于书中为什么将detach的作用注释成那样呢,我想作者在翻译成torch的时候,忽略了MAXNET框架(原书是maxnet框架)与pytorch的区别。 MaxNet是支持静态图的,所以对于MaxNet ,detach的作用是与注释相同的,但是pytorch是动态图,所以作用在这里就不同了!!!

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

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

相关文章

网站后台上传商品功能失效,如何排查和修复?

网站后台上传商品功能失效会影响正常的业务运营,因此需要尽快排查并修复。以下是详细的排查步骤和解决方案:确认前端页面加载情况: 首先,在浏览器中打开网站后台,检查页面是否完全加载,特别是上传商品相关的JavaScript和CSS文件。如果存在资源加载失败的情况,可能是由于…

云服务器频繁出现大流量提醒及访问异常

您好,当您频繁收到关于服务器流量过大的提醒,并且站点访问出现异常(如502 Bad Gateway或504 Gateway Timeout)时,这可能是由以下几个方面的原因造成的。下面我们将详细介绍这些问题及其对应的解决方案:流量来源分析:首先,确定流量来源是否合法。使用流量分析工具(如(网…

云服务器未预装网站管理系统

您好,当您购买新的云服务器时发现未预装网站管理系统,这通常是因为不同服务商提供的初始镜像有所不同。以下是一些常见原因及其解决方案:操作系统选择:在选择操作系统时,请注意某些版本可能默认不包含网站管理助手。如果您希望获得预装的建站工具,建议选择带有集成环境的…

IDEA如何快速回到上一次编辑的地方

前言 大家好,我是小徐啊。我们在使用IDEA开发Java应用的时候,经常是需要在不同的代码文件里面来回编辑的,这个是开发的常态。 如果小伙伴们不清楚IDEA如何快捷地切换代码文件,就会极大地影响开发效率。今天,小徐就来介绍其中的一种切换方式:回到上一次编辑的地方。 如何回…

织梦网站修改后台:掌握织梦CMS的后台管理

问题描述 织梦CMS是一款流行的CMS系统,用户可以通过后台管理系统进行网站内容和模板的修改。了解如何使用织梦CMS进行后台修改是提升网站管理能力的关键。 解决方案登录后台管理使用管理员账号登录织梦CMS后台管理系统。编辑内容在“内容管理”模块中编辑或添加新的文章、产品…

关于浏览器或者调试工具阻止前端请求

1、Block request URL(拦截前端请求某个接口)2、Block request domain(拦截前端请求某个域名的所有请求)

请问PHP网站如何修改网页代码?

修改PHP网站的网页代码,需要以下步骤:访问服务器:使用FTP客户端或服务器控制面板的文件管理器,访问存储PHP网站文件的服务器。 定位文件:在服务器上找到包含要修改的网页代码的PHP文件,通常位于网站根目录下的特定文件夹中,如public_html或www。 下载文件:将PHP文件下载…

请问如何修改公司网站图片?

修改公司网站图片可以提升网站的视觉效果,使其更加吸引人。以下是修改公司网站图片的基本步骤:备份原始图片:在进行任何修改之前,备份原始的图片文件。 准备新图片:准备需要上传的新图片。确保图片格式为JPEG、PNG或GIF,并且大小适中。 登录后台管理系统:使用管理员账户…

如何在DedeCMS网站后台修改模板?

问题描述: DedeCMS(织梦CMS)是一个流行的开源内容管理系统,本文将指导您如何在DedeCMS网站后台修改模板。 解决方案:登录网站后台管理系统: 通过域名/admin 或者域名/manager 访问后台管理系统。 进入模板管理模块: 在后台管理系统中,找到“模板管理”模块。 选择模板文…

如何全面修改网站内容?

问题描述: 网站内容的更新和修改是保持网站活力和吸引力的关键。本文将提供一个全面的指南,帮助您修改网站内容。 解决方案:登录网站后台管理系统: 通过域名/admin 或者域名/manager 访问后台管理系统。 查找内容管理模块: 在后台管理系统中,寻找“内容管理”或“文章管理…

请问如何对织梦模板网站进行有效的修改?

织梦CMS(DedeCMS)是一种广泛使用的开源内容管理系统,适用于各种类型的网站。修改织梦模板网站主要包括以下几个步骤:备份网站数据: 在进行任何修改之前,确保备份网站的所有文件和数据库,以防出现意外情况。 了解模板结构: 织梦模板通常由HTML、CSS、JavaScript和PHP代码…

请问织梦CMS网站首页需要频繁更新,如何高效地进行修改?

频繁修改网站首页是许多网站运营者面临的挑战。对于织梦CMS,可以采取以下策略来提高效率:模块化设计: 将首页的不同部分(如导航栏、轮播图、新闻列表等)设计为独立的模块,便于单独修改和更新。 使用织梦标签: 利用织梦CMS提供的标签系统,动态生成页面内容,减少手动修改…