TypeError: невозможно преобразовать тензор CUDA в numpy. Используйте Tensor.cpu (), чтобы сначала скопировать тензор в память хоста

Я использую modified predict-py-L34-L53ferrer. тестирование обрезанной модели SqueezeNet

[phung@archlinux SqueezeNet-Pruning]$ python predict.py --image 3_100.jpg --model model_prunned --num_class 2
prediction in progress
Traceback (most recent call last):
File “predict.py”, line 66, in
prediction = predict_image(imagepath)
File “predict.py”, line 52, in predict_image
index = output.data.numpy().argmax()
TypeError: can’t convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
[phung@archlinux SqueezeNet-Pruning]$

Я понимаю, что numpy еще не поддерживает GPU.

Как мне изменить код, чтобы избежать этой ошибки, не вызывая операцию тензорного копирования данных, tensor.cpu()?


person kevin998x    schedule 23.12.2018    source источник


Ответы (3)


Изменять

index = output.data.numpy().argmax()

to

index = output.cpu().data.numpy().argmax()

Это означает, что данные сначала перемещаются в процессор, а затем преобразуются в массив numpy.

person Umang Gupta    schedule 23.12.2018

Я узнал, что могу просто использовать

output.argmax()
person kevin998x    schedule 23.12.2018
comment
Я не думаю, что это дало бы вам массив numpy. Результатом этого будет тензор факела - person Umang Gupta; 28.12.2018
comment
@UmangGupta torch tensor - это то, что мне нужно. См. Рабочий пример на странице gitlab.com/promach/Pruning-CNN/tree / master / SqueezeNet-Pruning - person kevin998x; 29.12.2018
comment
Меня смутило название вашего вопроса. - person Umang Gupta; 04.01.2019

Вы можете использовать функцию torch.max следующим образом:

value, index = torch.max(output,1)
person Kaushik Roy    schedule 27.05.2020