程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PyTorch - 使用 `param.grad` 会影响学习过程吗? [解决了]大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决PyTorch - 使用 `param.grad` 会影响学习过程吗? [解决了]?

开发过程中遇到PyTorch - 使用 `param.grad` 会影响学习过程吗? [解决了]的问题如何解决?下面主要结合日常开发的经验,给出你关于PyTorch - 使用 `param.grad` 会影响学习过程吗? [解决了]的解决方法建议,希望对你解决PyTorch - 使用 `param.grad` 会影响学习过程吗? [解决了]有所启发或帮助;

我正在 CIFAR-10 上训练 resnet34。当我尝试为 param.grad 操作 @H_712_3@model.parameters() 时,我有一个非常奇怪的行为。

以下函数是所有混乱发生的地方。由于试图了解会发生什么,它目前没有做任何有用的事情。

def add_error(error):
    params = (param for param in model.parameters() if param.requires_grad)
    # [param.grad + err for param,err in zip(params,error)]                        # line 2
    # new_error = [param.grad + err for param,error)]            # line 3
    for param in params:
      param.grad.zero_()
    # new_error = [torch.zeros(param.grad.shape,device=devicE) for param in params] # line 6
    return new_error

用于梯度下降步骤:

def step(model,optimizer,batch,labels,error):
  optimizer.zero_grad()
  loss = compute_loss(model,labels)
  loss.BACkWARD()

  new_error = add_error(error=error)      <- add_error is called here
  optimizer.step()
  return new_error

其中优化器是 optim.SGD(model.parameters(),lr=0.1)compute_loss 本质上在 nn.CrossEntropyLoss() 和 @H_712_3@model(batch) 上调用 labels

我的期望:由于我将梯度设置为 0,所以无论我做什么,都不会发生任何变化:损失应该一直在原始值(2.4)附近

实际发生的事情

  • 当我只取消第 6 行的注释时,一切都按预期进行:损失接近常数 2.4
  • 当我只取消第 3 行的注释时,学习就好像我根本没有调用 add_error 一样。 IE。损失以与通常 SGD 相同的速度下降:2.4 -> 1.7 -> 1.3 -> ...(每个时期)。换句话说,以某种方式传播了梯度。
  • 当我取消注释第 2 行和第 6 行时:最奇怪的事情。损失增加4.3,然后缓慢减少4.3 -> 4.2 -> 4.14 -> 4.1 -> ...(我怀疑这种减少是批量标准化的结果)。

请注意,在这两种情况下,我实际上都使用 error,实际上我从未使用 error 来更新渐变。 此外,添加更多行(如第 2 行)不会影响结果。

问题:发生了什么?

  • 为什么损失会减少?渐变应始终为 $0$。
  • 如何改变损失值本身?

如果有帮助,我可能会尝试制作 MCVE 并将其发布在 pastebin 上(这将是一堵代码墙,太大而无法放在这里)。

解决方法

这个问题非常愚蠢:params 是一个生成器,在第一次迭代后就耗尽了。创建一个列表而不是一个生成器可以解决这个问题。

大佬总结

以上是大佬教程为你收集整理的PyTorch - 使用 `param.grad` 会影响学习过程吗? [解决了]全部内容,希望文章能够帮你解决PyTorch - 使用 `param.grad` 会影响学习过程吗? [解决了]所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:-使用