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操作的代码依旧报错,可以试一下代码部分顺序重构,发现可能存在的逻辑问题。


相关文章
|
11天前
|
人工智能 安全 PyTorch
SPDL:Meta AI 推出的开源高性能AI模型数据加载解决方案,兼容主流 AI 框架 PyTorch
SPDL是Meta AI推出的开源高性能AI模型数据加载解决方案,基于多线程技术和异步事件循环,提供高吞吐量、低资源占用的数据加载功能,支持分布式系统和主流AI框架PyTorch。
44 10
SPDL:Meta AI 推出的开源高性能AI模型数据加载解决方案,兼容主流 AI 框架 PyTorch
|
7月前
|
机器学习/深度学习 PyTorch 算法框架/工具
pytorch中非标量调用backward()的时候为什么要先进行sum操作
在《动手学深度学习》第二版教程中,当y为非标量的时候,调用backward()函数时,为什么先要求和呢(即y.sum().backward()),估计很多读者有点懵,今天小编给大家说说我的理解。
423 3
|
数据采集 自然语言处理 PyTorch
全套解决方案:基于pytorch、transformers的中文NLP训练框架,支持大模型训练和文本生成,快速上手,海量训练数据!
全套解决方案:基于pytorch、transformers的中文NLP训练框架,支持大模型训练和文本生成,快速上手,海量训练数据!
全套解决方案:基于pytorch、transformers的中文NLP训练框架,支持大模型训练和文本生成,快速上手,海量训练数据!
|
机器学习/深度学习 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此类错误解决方案
1405 0
基于Pytorch运行中出现RuntimeError: Not compiled with CUDA support此类错误解决方案
|
PyTorch 算法框架/工具
Pytorch中的.backward()方法
Pytorch中的.backward()方法
193 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获取梯度信息
448 0
【26】pytorch中的grad求导说明以及利用backward获取梯度信息
|
PyTorch 算法框架/工具
PyG (PyTorch Geometric) Dropbox系图数据集无法下载的解决方案(AMiner, DBLP, IMDB, LastFM)(持续更新ing...)
本文主要关注PyG官方提供的数据集中,因为数据下载源是Dropbox,所以不能直接下载的解决方案。
|
编解码 算法 PyTorch
解决方案:炼丹师养成计划 Pytorch+DeepLearning遇见的各种报错与踩坑避坑记录(二)
解决方案:炼丹师养成计划 Pytorch+DeepLearning遇见的各种报错与踩坑避坑记录(二)
解决方案:炼丹师养成计划 Pytorch+DeepLearning遇见的各种报错与踩坑避坑记录(二)
下一篇
DataWorks