• PyTorch中在反向传播前为什么要手动将梯度清零?


    对于torch中训练时,反向传播前将梯度手动清零的理解

    简单的理由是因为PyTorch默认会对梯度进行累加。至于为什么PyTorch有这样的特点,在网上找到的解释是说由于PyTorch的动态图和autograd机制使得其非常灵活,这也意味着你可以得到对一个张量的梯度,然后再次用该梯度进行计算,然后又可重新计算对新操作的梯度,对于何时停止前向操作并没有一个确定的点。所以自动设置梯度为0比较棘手,因为你不知道什么时候一个计算会结束以及什么时候又会有一个新的开始。默认累加的好处是当在多任务中对前面共享部分的tensor进行了多次计算操作后,调用不同任务loss的backward,那些tensor的梯度会自动累加,缺点是当你不想先前的梯度影响到当前梯度的计算时需要手动清零。

    多思考也是一种努力,做出正确的分析和选择,因为我们的时间和精力都有限,所以把时间花在更有价值的地方。
  • 相关阅读:
    利用idea里面的mysql插件进行导入sql文件
    JSTL标签
    deepin20系统下配置JAVA开发环境
    deepin20安装及问题解决
    SpringBoot 在项目启之后执行自定义方法的两种方式
    Nick 的经验书
    Java 经验书
    SpringBoot 经验书
    Linux 经验书
    在MacOS中启动SSH服务
  • 原文地址:https://www.cnblogs.com/LiuXinyu12378/p/11416172.html
Copyright © 2020-2023  润新知