码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 有关于torch.autograd.grad


    torch.autograd模块给用户提供了一个自定义求导的接口。torch.autograd.grad可以手动地将loss对某部分参数进行梯度求导,特别适用于debug和观测。

    笔者经常使用这个接口用于观测模型优化出现问题时,梯度值是否出现异常;以及用于代替tensorboard等可视化工具,快速理解复杂的计算图。

    比方说下面这段代码:

    t2 = torch.autograd.grad(adv_loss,next(self.dis.parameters()),retain_graph=True)
    t3 = torch.autograd.grad(adv_loss,next(self.gen.parameters()),retain_graph=True)
    t1 = torch.autograd.grad(adv_loss,target,retain_graph=True)
    
    • 1
    • 2
    • 3

    用于观测,最终的loss是否由self.dis(model)、self.gen(model)、target(tensor)计算,进而用于判断哪些模型参与这个loss的优化。这个功能就类似于使用tensorboard可视化loss的计算过程,只不过这样更方便。

    如果在autograd的时候出现如下错误:
    在这里插入图片描述
    “...appears to not have been used in the graph”就说明,这部分模型参数、变量,并没有参与到这个loss的计算中,自然loss.backward()的时候,这部分参数也不会被优化。


    用这种技巧的时候,要注意两个参数:

    • allow_unused=False:默认False,意味着如果被求导参数不在计算图的话,会报错;如果设置为True,就算参数不在loss的计算图里,梯度也会被计算,而且必定为0。这里的话,必须设置为False,也就是如果参数不在计算图里,就会提示上述`“…appears to not have been used in the graph”的错误。

    在这里插入图片描述

    • retain_graph=True:默认为False,也就是一旦求导一次之后,计算图就会被释放;这里的话如果要观测多次autograd的结果,就必须设置为True,把计算图保留。
      在这里插入图片描述

    更多有关于torch.autograd.grad的细节,参见:
    torch官方文档

  • 相关阅读:
    详解性能测试(2023最新版)
    盘点:数字人直播系统源码部署哪家好?
    JShaman JavaScript混淆加密工具,中英版本区别
    uni-app 之 表格设置
    列表—list 使用
    【java基础】静态内部类又是如何实现线程安全的呢?(利用了类的加载机制)
    英伟达与斯坦福携手,打造未来全息XR眼镜:头带时代的终结
    修改Android Studio默认的gradle目录
    向量化编程书籍推荐
    vim常用命令
  • 原文地址:https://blog.csdn.net/weixin_43301333/article/details/128214204
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号