Воспроизведена ошибка
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.Ср это обсуждение файла обсуждения. .(Точнее, я думаю, что это нужно сделать для того, чтобы вытащить фактический тензор из своей оболочки pytorch Variable
, ср. этот другой пост обсуждения. Pytorch ).