Pytorch backward报错2次访问计算图需要retain_graph=True的情况详解

 更新时间:2024年02月20日 09:47:04   作者:培之  
这篇文章主要介绍了Pytorch backward报错2次访问计算图需要retain_graph=True的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

backward报错2次访问计算图需要 retain_graph=True 的一种情况

错误代码

错误的原因在于

y1 = 0.5*x*2-1.2*x
y2 = x**3

没有放到循环里面,没有随着 x 的优化而相应变化。

import torch
import numpy as np
import torch.optim as optim

torch.autograd.set_detect_anomaly(True)

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
x = torch.tensor([1.0, 2.0, 3.0,4.5], dtype=torch.float32, requires_grad=True, device=device)


y_GT= torch.tensor([10, -20, -30,45], dtype=torch.float32,  device=device)

print(f'x{x}')


optimizer = optim.Adam([x], lr=1)
y1 = 0.5*x*2-1.2*x
y2 = x**3

for i in range(10):

    print(f'{i}: x{x}')
    optimizer.zero_grad()


    loss = (y1+y2-y_GT).mean()
    loss.backward()
    optimizer.step()
    print(f'{i}: x{x}')

正确代码

import torch
import numpy as np
import torch.optim as optim

torch.autograd.set_detect_anomaly(True)

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
x = torch.tensor([1.0, 2.0, 3.0,4.5], dtype=torch.float32, requires_grad=True, device=device)


y_GT= torch.tensor([10, -20, -30,45], dtype=torch.float32,  device=device)

print(f'x{x}')


optimizer = optim.Adam([x], lr=1)


for i in range(10):

    print(f'{i}: x{x}')
    optimizer.zero_grad()
    y1 = 0.5*x*2-1.2*x
    y2 = x**3

    loss = (y1+y2-y_GT).mean()
    loss.backward()
    optimizer.step()
    print(f'{i}: x{x}')

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持程序员之家。

相关文章

  • Python中使用第三方库xlrd来写入Excel文件示例

    Python中使用第三方库xlrd来写入Excel文件示例

    这篇文章主要介绍了Python中使用第三方库xlrd来写入Excel文件示例,本文讲解了安装xlwt、API介绍、使用xlwt写入Excel文件实例,需要的朋友可以参考下
    2015-04-04
  • python一行输入n个数据问题

    python一行输入n个数据问题

    这篇文章主要介绍了python一行输入n个数据问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • python+selenium 鼠标事件操作方法

    python+selenium 鼠标事件操作方法

    今天小编就为大家分享一篇python+selenium 鼠标事件操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python搭建简易服务器分析与实现

    python搭建简易服务器分析与实现

    本文将介绍python搭建简易服务器实现步骤,需要了解的朋友可以参考下
    2012-12-12
  • 详解Python中映射类型的内建函数和工厂函数

    详解Python中映射类型的内建函数和工厂函数

    这篇文章主要介绍了详解Python中映射类型的内建函数和工厂函数,目前Python的内建映射类型只有字典一种,需要的朋友可以参考下
    2015-08-08
  • python矩阵的基本运算及各种操作

    python矩阵的基本运算及各种操作

    python的numpy库提供矩阵运算的功能,因此我们在需要矩阵运算的时候,需要导入numpy的包,下面这篇文章主要给大家介绍了关于python矩阵的基本运算及各种操作的相关资料,需要的朋友可以参考下
    2022-11-11
  • Django学习笔记之Class-Based-View

    Django学习笔记之Class-Based-View

    下面这篇文章主要介绍了Class-based View,为什么要有这个Class-based View呢?view不都是一个方法吗?跟类有啥关系?其实答案很明显,用类其实是为了抽象,抽象出通用的,将可变的暴露出来,这样我们就可以用最少的代码实现复杂的功能了。下面来看看详细的介绍吧。
    2017-02-02
  • Python文件系统模块pathlib库

    Python文件系统模块pathlib库

    这篇文章介绍了Python中的文件系统模块pathlib库,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • python3 http提交json参数并获取返回值的方法

    python3 http提交json参数并获取返回值的方法

    今天小编就为大家分享一篇python3 http提交json参数并获取返回值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Django将默认的SQLite更换为MySQL的实现

    Django将默认的SQLite更换为MySQL的实现

    今天小编就为大家分享一篇Django将默认的SQLite更换为MySQL的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11

最新评论

?


http://www.vxiaotou.com