当前位置:   article > 正文

【代码小坑】梯度回传为0_torch.autograd.grad 为0为什么

torch.autograd.grad 为0为什么

记录一下训练过程中遇到的问题,由于这个问题我花了很长时间才解决,所以值得记录。

先给出结论:tensor转换成numpy后会丢失梯度,导致回传出现问题

由于原代码不容易理解,简单用个例子说明

  1. import torch
  2. from torch.autograd import Variable
  3. input=Variable(torch.tensor([1,2,3.]))
  4. input.requires_grad=True
  5. input_numpy=input.detach().numpy()
  6. x=input_numpy*2
  7. x_tensor=torch.from_numpy(x)
  8. output=x_tensor.sum()
  9. output.requires_grad=True # 没有会报错
  10. output.backward()
  11. print(input.grad)
>> None

心得:写代码的时候不知道为啥(可能是脑子抽了),把tensor转成numpy去计算了,实际上numpy能操作的tensor也可以,没必要转化,反而给自己留下了坑。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/59936
推荐阅读
相关标签
  

闽ICP备14008679号