我的代码有错误,无论尝试哪种方式都无法解决。
错误很简单,我返回一个值:
id user_id action
2 4832 click_icon
3 4832 click_image
,然后在管道中获取错误:
torch.exp(-LL_total/T_total)
诸如RuntimeError: Can't call numpy() on Variable that requires grad. Use var.detach().numpy() instead.
之类的解决方案也会出现相同的错误。
我该如何解决?谢谢。
答案 0 :(得分:1)
我刚遇到这个问题 在运行 epoch 时,我将损失记录到列表中
final_losses.append(loss)
一旦我跑遍了所有的时代,我想绘制输出
plt.plot(range(epochs), final_loss)
plt.ylabel('RMSE Loss')
plt.xlabel('Epoch');
我在我的 Mac 上运行它,没有问题,但是,我需要在 Windows PC 上运行它,它产生了上面提到的错误。所以,我检查了每个变量的类型。
Type(range(epochs)), type(final_losses)
<块引用>
范围,列表
看起来应该没问题。
费了点劲才意识到 final_losses 列表是一个张量列表。然后我将它们转换为带有新列表变量 fi_los 的实际列表。
fi_los = [fl.item() for fl in final_losses ]
plt.plot(range(epochs), fi_los)
plt.ylabel('RMSE Loss')
plt.xlabel('Epoch');
成功!
答案 1 :(得分:0)
我有相同的错误消息,但是是为了在matplotlib上绘制散点图。
有两种方法可以摆脱此错误消息:
使用以下命令导入fastai.basics
库:from fastai.basics import *
如果仅使用torch
库,请记住使用以下命令来摘除requires_grad
:
with torch.no_grad():
(your code)
答案 2 :(得分:0)
import torch
tensor1 = torch.tensor([1.0,2.0],requires_grad=True)
print(tensor1)
print(type(tensor1))
tensor1 = tensor1.numpy()
print(tensor1)
print(type(tensor1))
这将导致与行tensor1 = tensor1.numpy()
完全相同的错误:
tensor([1., 2.], requires_grad=True)
<class 'torch.Tensor'>
Traceback (most recent call last):
File "/home/badScript.py", line 8, in <module>
tensor1 = tensor1.numpy()
RuntimeError: Can't call numpy() on Variable that requires grad. Use var.detach().numpy() instead.
Process finished with exit code 1
在错误消息中建议您这样做,只需将var
替换为变量名
import torch
tensor1 = torch.tensor([1.0,2.0],requires_grad=True)
print(tensor1)
print(type(tensor1))
tensor1 = tensor1.detach().numpy()
print(tensor1)
print(type(tensor1))
将按预期返回
tensor([1., 2.], requires_grad=True)
<class 'torch.Tensor'>
[1. 2.]
<class 'numpy.ndarray'>
Process finished with exit code 0
除了实际值定义之外,您还需要将张量转换为另一个不需要梯度的张量。该其他张量可以转换为numpy数组。 cf. this discuss.pytorch post。 (我认为,更确切地说,为了从pytorch Variable
包装器中取出实际张量,请参见this other discuss.pytorch post,需要这样做。)
答案 3 :(得分:0)
from torch.autograd import Variable
type(y) # <class 'torch.Tensor'>
y = Variable(y, requires_grad=True)
y = y.detach().numpy()
type(y) #<class 'numpy.ndarray'>