(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)

1. 具有多个loss值

retain_graph设置True,一般多用于两次backward

# 假如有两个Loss,先执行第一个的backward,再执行第二个backward
loss1.backward(retain_graph=True) # 这样计算图就不会立即释放
loss2.backward() # 执行完这个后,所有中间变量都会被释放,以便下一次的循环
optimizer.step() # 更新参数

retain_graph设置True后一定要知道释放,否则显卡会占用越来越多,代码速度也会跑的越来越慢。

2. 但是,有的时候我明明仅有一个模型的也会出现这种错误

第一种是输入的原因。

// Example
x = torch.randn((100,1), requires_grad = True)
y = 1 + 2 * x + 0.3 * torch.randn(100,1)
x_train, y_train = x[:70], y[:70]
x_val, y_val = x[70:], y[70:]for epoch in range(n_epochs):...prediction = model(x_train)loss.backward()...

在多次循环的过程中,input的梯度没有清除,而且我们也不需要计算输入的梯度,因此将x的require_grad设置为False就可以解决问题。

第二种是我在训练LSTM时候发现的。

class LSTMpred(nn.Module):def __init__(self, input_size, hidden_dim):self.hidden = self.init_hidden()...def init_hidden(self):  #这里我们是需要个隐层参数的return (torch.zeros(1, 1, self.hidden_dim, requires_grad=True),torch.zeros(1, 1, self.hidden_dim, requires_grad=True))def forward(self, seq):...

这里面的self.hidden我们在每一次训练的时候都要重新初始化隐层参数:

for epoch in range(Epoch):...model.hidden = model.init_hidden()modout = model(seq)...

3. 总结

其实,想想这几种情况都是一回事,都是网络在反向传播中不允许多个backward(),也就是梯度下降反馈的时候,有多个循环过程中共用了同一个需要计算梯度的变量,在前一个循环清除梯度后,后面一个循环过程就会在这个变量上栽跟头(个人想法)。

Pytorch: retain_graph=True错误信息相关推荐

  1. pytorch 中retain_graph==True的作用

    总的来说进行一次backward之后,各个节点的值会清除,这样进行第二次backward会报错,如果加上retain_graph==True后,可以再来一次backward. retain_graph ...

  2. Pytorch使用过程错误与解决 -汇总~

    Pytorch使用过程错误与解决 error1:关键词 copy tensor error2:关键词 张量相加 error3:关键词 nn.Linear()的使用 报错1: 报错代码: 错误原因: 报 ...

  3. winform程序捕获全局异常,对错误信息写入日志并弹窗

    使用场景:在winform程序中如果没对方法进行try catch操作,若方法内出错,则整个程序报错并退出,如下图 如果程序已在客户手中,若没对错误的详细信息进行拍照,我们则不知道错误原因是什么.我们 ...

  4. 如何设计系统的错误码及错误信息

    作者:朱金灿 来源:http://blog.csdn.net/clever101 一个软件系统,肯定是涉及到很多错误信息.比如用户执行出错了,软件需要将错误信息返回给用户.那么如何设计错误码及错误信息 ...

  5. 前端错误信息收集(errorEruda)解析

    github:errorEruda移动调试,bug收集工具 img[src],script[src],link[href]请求链接错误监控: document.addEventListener(&qu ...

  6. 后盾网lavarel视频项目---页面post方式提交之后动态弹出错误信息

    后盾网lavarel视频项目---页面post方式提交之后动态弹出错误信息 一.总结 一句话总结: 1.思路和我想的一样,有错误的时候弹出提示错误消息的模态框就好,没有错误的时候不管它 2.把模态框的 ...

  7. 项目上线,php的错误信息必须不让其在页面中显示给客户,

    对于PHP开发者来 说,一旦某个产品投入使用,应该立即将 display_errors选项关闭,以免因为这些错误所透露的路径.数据库连接.数据表等信息而遭到黑客攻击.但是,任何一个产品在投入使用后,都 ...

  8. Ajax.net显示错误信息

    <asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat=&q ...

  9. 辅助类——记录错误信息

    记录错误信息 Debug游戏代码可能是非常复杂的,特别是如果您没有得到任何异常,但某些渲染循环却出错.只设置几个断点并不够,尤其是如果游戏在运行一段时间之后遇到错误,Debug并不是正确的选择.您想知 ...

最新文章

  1. sqlite-jdbc jar包下载过程笔记
  2. 《研磨设计模式》chap18 状态模式state(2)模式介绍
  3. 面试官问你B树和B 树,就把这篇文章丢给他
  4. 腾讯副总裁姚星:腾讯AI Lab将致力打造通往AGI之路
  5. bzoj1143/2718 祭祀river(最大独立集)
  6. 硬链接与符号链接的比较?
  7. 亚马逊与Visa就交易费达成协议 重新接受Visa支付
  8. python查看方法作用_python中有帮助函数吗
  9. Java compiler level does not match the version of the installed Java project facet.问题
  10. AMiner会议论文推荐第三十二期
  11. java mac excel 中文乱码_解决mac excel中文乱码的问题
  12. How to compile a node file?如何编译一个节点文件?
  13. Java集成Outlook邮件操作
  14. 小程序向数组中添加数据
  15. html表格中复选框代码怎么写,获取html表中的选中复选框
  16. 2020web前端学习路线(附全套前端视频教程+教学大纲
  17. 小呀嘛小二郎 背着那书包上学堂
  18. SSD固态硬盘 4K对齐
  19. linux私房菜高级,别人的Linux私房菜(15)磁盘配额与高级文件系统管理
  20. 真!无钥匙!数字钥匙在智能电动车领域的实践

热门文章

  1. css实现3D旋转效果
  2. WORD 同一位置连续引用多个参考文献
  3. 交叉编译libX11
  4. C# 对路径的访问被拒绝
  5. 嘉为蓝鲸携手东风集团、上汽零束再获信通院四项大奖
  6. Docker2375端口未授权getshell
  7. DNSPod十问高春辉: 老兵不死, 我还有梦!
  8. 微分形式的几何第一章笔记
  9. FlowLayoutPanel内的控件调换顺序
  10. Java中多态的练习