Pytorch中Trying to backward through the graph和one of the variables needed for gradient错误解决方案

简介: Pytorch中Trying to backward through the graph和one of the variables needed for gradient错误解决方案

Pytorch中Trying to backward through the graph a second time错误解决方案

一、项目代码运行过程中完整的错误如下:

RuntimeError: Trying to backward through the graph a second time (or directly access saved tensors after they have already been freed). Saved intermediate values of the graph are freed when you call .backward() or autograd.grad(). Specify retain_graph=True if you need to backward through the graph a second time or if you need to access saved tensors after calling backward.

二、错误内容翻译成中文就是:

运行错误:第二次尝试向后遍历图形(或在已释放的张量后直接访问已保存的张量)。调用时,图形的已保存中间值将被释放。向后()或自动标记。梯度()。如果需要再次向后浏览图形,或者如果需要在向后调用后访问保存的张量,请指定retain_graph=True。

三、根据错误提示,解决方案就是在反向传播的函数中设定“retain_graph=True”(默认为False),每次反向传播后暂时保留中间节点的梯度值,保存后重新运行项目代码。

Pytorch中one of the variables needed for gradient computation has been modified by an inplace operation错误一种解决方案

一、项目代码运行过程中完整的错误如下:

RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.FloatTensor [512, 2]], which is output 0 of AsStridedBackward0, is at version 2; expected version 1 instead. Hint: enable anomaly detection to find the operation that failed to compute its gradient, with torch.autograd.set_detect_anomaly(True).

二、错误内容翻译成中文就是:

运行错误:梯度计算所需的变量之一已被一个就地操作修改:[torch.FloatTensor[512,2]],它是AsstridedBackard0的输出0,处于版本2;应该是版本1。提示:使用torch启用异常检测以查找未能计算其梯度的操作。签名。设置_检测_异常(真)。

三、解决问题心路历程:错误核心意思就是说在计算梯度的时候检查出某个Variable有被一个 inplace操作修改导致反向传播无法顺利进行。博主通过阅读大量资料和其他博主与此类似相关问题基本上是需要去寻找用户自己代码中进行inplace操作的地方进行修改,断绝inplace操作。但是博主通过一行一行排除寻找自己报错的代码发现自己代码中在Relu和view使用了inpalce操作,博主马上进行修改但是并没有解决问题。这时博主进行代码训练块部分顺序重构,将训练模型放进epoch循环里面发现能够顺利运行,此逻辑问题出在如果训练模型在epoch外,那么训练模型运行一次后的结果永远不会再变化,因为在epoch循环之外,即使已经反向传播更新了权重参数,但是无法起到重新训练作用。然后博主又测试将Relu和view还原使用了inpalce操作发现依旧正常运行,因此给出现此问题的码友们提供一个思路就是若修改了自己代码中的inplace操作的代码依旧报错,可以试一下代码部分顺序重构,发现可能存在的逻辑问题。


相关文章
|
5月前
|
机器学习/深度学习 PyTorch 算法框架/工具
pytorch中非标量调用backward()的时候为什么要先进行sum操作
在《动手学深度学习》第二版教程中,当y为非标量的时候,调用backward()函数时,为什么先要求和呢(即y.sum().backward()),估计很多读者有点懵,今天小编给大家说说我的理解。
308 3
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】2. 深度学习框架Pytorch如何自动求梯度(gradient)
【从零开始学习深度学习】2. 深度学习框架Pytorch如何自动求梯度(gradient)
【从零开始学习深度学习】2. 深度学习框架Pytorch如何自动求梯度(gradient)
|
并行计算 PyTorch 算法框架/工具
基于Pytorch运行中出现RuntimeError: Not compiled with CUDA support此类错误解决方案
基于Pytorch运行中出现RuntimeError: Not compiled with CUDA support此类错误解决方案
1181 0
基于Pytorch运行中出现RuntimeError: Not compiled with CUDA support此类错误解决方案
|
PyTorch 算法框架/工具
Pytorch中的.backward()方法
Pytorch中的.backward()方法
167 0
Pytorch中的.backward()方法
|
数据可视化 PyTorch 算法框架/工具
Pychram Pytorch Tensorboard 报错 “No dashboards are active for the current data set.“ 解决方案
Pychram Pytorch Tensorboard 报错 “No dashboards are active for the current data set.“ 解决方案
Pychram Pytorch Tensorboard 报错 “No dashboards are active for the current data set.“ 解决方案
|
机器学习/深度学习 PyTorch 算法框架/工具
【26】pytorch中的grad求导说明以及利用backward获取梯度信息
【26】pytorch中的grad求导说明以及利用backward获取梯度信息
386 0
【26】pytorch中的grad求导说明以及利用backward获取梯度信息
|
PyTorch 算法框架/工具
PyG (PyTorch Geometric) Dropbox系图数据集无法下载的解决方案(AMiner, DBLP, IMDB, LastFM)(持续更新ing...)
本文主要关注PyG官方提供的数据集中,因为数据下载源是Dropbox,所以不能直接下载的解决方案。
|
机器学习/深度学习 PyTorch 算法框架/工具
【干货】深度学习实验流程及 PyTorch 提供的解决方案
在研究深度学习的过程中,当你脑中突然迸发出一个灵感,你是否发现没有趁手的工具可以快速实现你的想法?看完本文之后,你可能会多出一个选择。本文简要分析了研究深度学习问题时常见的工作流, 并介绍了怎么使用 PyTorch 来快速构建你的实验。
3594 0
|
6天前
|
机器学习/深度学习 PyTorch 调度
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型
在深度学习中,学习率作为关键超参数对模型收敛速度和性能至关重要。传统方法采用统一学习率,但研究表明为不同层设置差异化学习率能显著提升性能。本文探讨了这一策略的理论基础及PyTorch实现方法,包括模型定义、参数分组、优化器配置及训练流程。通过示例展示了如何为ResNet18设置不同层的学习率,并介绍了渐进式解冻和层适应学习率等高级技巧,帮助研究者更好地优化模型训练。
15 4
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型
|
12天前
|
机器学习/深度学习 监控 PyTorch
PyTorch 模型调试与故障排除指南
在深度学习领域,PyTorch 成为开发和训练神经网络的主要框架之一。本文为 PyTorch 开发者提供全面的调试指南,涵盖从基础概念到高级技术的内容。目标读者包括初学者、中级开发者和高级工程师。本文探讨常见问题及解决方案,帮助读者理解 PyTorch 的核心概念、掌握调试策略、识别性能瓶颈,并通过实际案例获得实践经验。无论是在构建简单神经网络还是复杂模型,本文都将提供宝贵的洞察和实用技巧,帮助开发者更高效地开发和优化 PyTorch 模型。
19 3
PyTorch 模型调试与故障排除指南

热门文章

最新文章

下一篇
无影云桌面