在jupyter notebook和Spyder中执行相同pytorch代码,得到tensor的grad_fn和requires_grad属性却有区别,代码如下:
import torch
print(torch.__version__)
x = torch.tensor([1.0,2.2],requires_grad=True)
print(x)
y = x + 2
print(y)
print(y.grad_fn , x.grad_fn)
- jupyter notebook执行结果
1.2.0
tensor([1.0000, 2.2000], requires_grad=True)
tensor([3.0000, 4.2000], grad_fn=<AddBackward0>)
<AddBackward0 object at 0x000000000F22A550> None
可以看出,因为x.requires_grad=True,故y.grad_fn不是None,该结果符合预期。
2.Spyder执行结果
1.2.0
tensor([1.0000, 2.2000], requires_grad=True)
tensor([3.0000, 4.2000])
None None
这里虽然y的计算数值正确,但是y.grad_fn却是None,此处不符合预期。而且进行y.backward()操作时,提示如下错误:
RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn
请大佬们帮忙看看什么原因导致Spyder输出结果有差异?该怎么解决呢?
另外spyder版本为3.3.2 。