首页 > 其他分享 >pytorch反向传播错误解决:RuntimeError: Trying to backward through the graph a second time, but the buffers ha

pytorch反向传播错误解决:RuntimeError: Trying to backward through the graph a second time, but the buffers ha

时间:2024-01-05 17:46:52浏览次数:41  
标签:graph torch https time backward True

pytorch反向传播错误解决:

错误: RuntimeError: Trying to backward through the graph a second time, but the buffers have already been freed. Specify retain_graph=True when calling backward the first time.
归因排查:

  • 出现这种错误有可能是反向传播过程中出现了二次传播,千万不要加retain_graph,这个不是原因
  • 经过查看代码,推测是有一部分可学习Tensor在反向传播过程中被遍历了两边导致的,尝试通过分离的手段将一个Tensor分离为两个。
  • 分离后仍然没有解决,尝试在可能出现二次传播,并且不需要传播的地方加入detach(),但是依然报错。
  • 尝试在训练过程中加入torch.autograd.detect_anomaly(True) 检查梯度传播过程,发现其中有一个sigmod函数报错,其无法更新,报错信息为:Warning: Error detected in SigmoidBackward. No forward pass information available. Enable detect anomaly during forward pass for more information. (print_stack at /pytorch/torch/csrc/autograd/python_anomaly_mode.cpp:42
  • 由于模型中只有一个sigmod函数,因此确定报错信息位置,经过和原始模型对比,发现有可能是因为原始模型使用的是@property方法,这可以动态调整,而我的方法是直接赋值。经过调整,解决问题
  • 其代码如下:(部分)
        self.x_lmbda_ = nn.Parameter(torch.ones([]) * 0, requires_grad=True)
        # self.x_lmbda = torch.sigmoid(10 ** self.x_lmbda_ - 6).to(device) #错误代码
	@property
    def x_lmbda(self):  # The one that controls GCN-->GATConv
        return torch.sigmoid(10 ** self.x_lmbda_ - 6) #正确代码

耗费时间: 5个小时

参考文献

https://stackoverflow.com/questions/48274929/pytorch-runtimeerror-trying-to-backward-through-the-graph-a-second-time-but
https://blog.csdn.net/ybacm/article/details/131528711
https://blog.csdn.net/q7w8e9r4/article/details/134620547
https://zhuanlan.zhihu.com/p/675682867
https://chat.openai.com/

标签:graph,torch,https,time,backward,True
From: https://www.cnblogs.com/David-Dong/p/17947734

相关文章

  • MySQL三大日志,mvcc、DateTime 类型等
    1、MySQL事务隔离级别详解解决幻读的方法解决幻读的方式有很多,但是它们的核心思想就是一个事务在操作某张表数据的时候,另外一个事务不允许新增或者删除这张表中的数据了。解决幻读的方式主要有以下几种:将事务隔离级别调整为 SERIALIZABLE 。在可重复读的事务级别下,给事务操......
  • knex迁移 - 'ER_INVALID_DEFAULT: 'timestamp'的默认值无效
    在Knex中使用.timestamp()方法时,默认情况下会为该列设置当前时间戳作为默认值。然而,根据你的错误提示,数据库可能不支持此默认值。为了解决这个问题,你可以尝试以下方法:如果你的数据库支持DEFAULTCURRENT_TIMESTAMP,你可以尝试在列定义中添加defaultTo(knex.fn.now(......
  • TuGraph Analytics交互式图查询:让图所见即所得
    作者:廖梵抒TuGraphAnalytics提供了OLAP图分析能力,实现图上的交互式查询,用户在构图并导入数据之后,可以通过输入GQL语句对图查询分析,并以可视化的方式直观地展示点边结果。OLAP架构在TuGraphAnalyticsOLAP架构中,主要以下组件:Client:用户通过Client提交查询语句,Client负责和Co......
  • 2024-01-03:用go语言,给你两个长度为 n 下标从 0 开始的整数数组 cost 和 time, 分别表示
    2024-01-03:用go语言,给你两个长度为n下标从0开始的整数数组cost和time,分别表示给n堵不同的墙刷油漆需要的开销和时间。你有两名油漆匠,一位需要付费的油漆匠,刷第i堵墙需要花费time[i]单位的时间,开销为cost[i]单位的钱。一位免费的油漆匠,刷任意一堵墙的时间为1......
  • Timescaledb异步流复制标准步骤
    Timescaledb环境信息postgresql部署总览备注说明主节点192.168.111.136/24从节点192.168.111.134/24用户和组规划Postgres使用Postgres用户部署和管理端口规划5432默认5432通信端口部署路径/app/timescaledb/data数据安装位置安装包/app/timescaledb/rpmpostgresql12-12.4-1PGDG.rh......
  • 无涯教程-Java 正则 - \p{Graph}匹配函数
    字符类\p{Graph}与任何可见字符匹配。p{Graph}-示例下面的示例显示Posix字符类匹配的用法。packagecom.learnfk;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassPosixCharacterClassDemo{privatestaticfinalStringREGEX="......
  • Microsoft 365开发:如何通过Graph Powershell推动密码过期邮件提醒
    51CTOBlog地址:https://blog.51cto.com/u_13969817密码过期提醒是一种安全措施,用于确保用户定期更改其密码,以减少密码被盗用的风险。当用户密码过期时,系统发送提醒通知,告知需要更改密码。这种提醒通常可以以电子邮件、系统通知的方式发送给用户,提醒中通常包含有关如何更改密码的提......
  • OpenTSDB: The Ultimate Guide for Time Series Database Management
    1.背景介绍OpenTSDB,全称为Open-SourceTimeSeriesDatabase,是一个开源的时间序列数据库管理系统,专为监控和日志收集而设计。它能够高效地存储和检索大量的时间序列数据,支持多种数据源,如Hadoop、Graphite、Ganglia等。OpenTSDB的设计目标是提供一个可扩展、高性能、高可用性的......
  • Delphi 类(TObject、TPersistent、TComponent、TControl、TWinControl、TCustomControl
     TObject:    VCL中所有类的根类,即是说:VCL中所有的类/组件/控件都是从TObject中继承而来。TObject类中定义了基本的构造方法和析构方法。  TPersistent:    继承于TObject,按字典中的意思是“持久类”(姑且这样叫它吧,因为我一直就是这样叫这个类的-_-|)。该类在VCL中......
  • datetime和subprocess模块
    datetime和subprocess模块【一】datetime模块【1】格式输出我们的日期/时间print(datetime.date(year=2023,month=12,day=20))print(datetime.time(hour=11,minute=36,second=10))print(datetime.datetime())【2】获取本地的时间print(datetime.date.today())#20......