Pytorch: Невозможно вызвать numpy () для переменной, для которой требуется grad. Вместо этого используйте var.detach (). Numpy () - PullRequest
1 голос
/ 02 апреля 2019

В моем коде есть ошибка, которая не исправляется, каким бы способом я не пытался.

Ошибка проста, я возвращаю значение:

torch.exp(-LL_total/T_total)

и получите ошибку позже в конвейере:

RuntimeError: Can't call numpy() on Variable that requires grad. Use var.detach().numpy() instead.

Решения, такие как cpu().detach().numpy(), выдают ту же ошибку.

Как я мог это исправить? Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 июля 2019

Воспроизведена ошибка

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 ).

0 голосов
/ 07 мая 2019

У меня было то же сообщение об ошибке, но оно было для рисования точечной диаграммы на matplotlib.

Есть 2 способа, которыми я мог выйти из этого сообщения об ошибке:

  1. импортировать библиотеку fastai.basics с: from fastai.basics import *

  2. Если вы используете только библиотеку torch, не забудьте снять requires_grad с:

    with torch.no_grad():
        (your code)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...