gpt4 book ai didi

python - 将 CUDA 张量转换为 NumPy

转载 作者:行者123 更新时间:2023-12-05 09:12:34 25 4
gpt4 key购买 nike

首先,我尝试了这些解决方案: 1234 ,但对我不起作用。

在训练和测试神经网络之后,我试图展示一些例子来验证我的工作。我将方法命名为 predict,我将图像传递给它以预测它属于哪个类:

def predict(model, image_path, topk=5):
''' Predict the class (or classes) of an image using a trained deep learning model.
'''

output = process_image(image_path)
output.unsqueeze_(0)
output = output.cuda().float()

model.eval()

with torch.no_grad():
score = model(output)
prob, idxs = torch.topk(score, topk)

# Convert indices to classes
idxs = np.array(idxs)
idx_to_class = {val:key for key, val in model.class_to_idx.items()}
classes = [idx_to_class[idx] for idx in idxs[0]]

# Map the class name with collected topk classes
names = []
for cls in classes:
names.append(cat_to_name[str(cls)])

return prob, names

然后是最后一步,显示基于神经网络训练的最终结果,如下所示:

# TODO: Display an image along with the top 5 classes
x_pos, y_pos = predict(model, img_pil, topk=5)

ax_img = imshow(output)
ax_img.set_title(y_pos[0])

plt.figure(figsize=(4,4))
plt.barh(range(len(y_pos)), np.exp(x_pos[0]))
plt.yticks(range(len(y_pos)), y_pos)

plt.show()

错误是:

---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-45-e3f9951e9804> in <module>()
----> 1 x_pos, y_pos = predict(model, img_pil, topk=5)
2
3 ax_img = imshow(output)
4 ax_img.set_title(y_pos[0])
5

1 frames
<ipython-input-44-d77500f31561> in predict(model, image_path, topk)
14
15 # Convert indices to classes
---> 16 idxs = np.array(idxs)
17 idx_to_class = {val:key for key, val in model.class_to_idx.items()}
18 classes = [idx_to_class[idx] for idx in idxs[0]]

/usr/local/lib/python3.6/dist-packages/torch/tensor.py in __array__(self, dtype)
456 def __array__(self, dtype=None):
457 if dtype is None:
--> 458 return self.numpy()
459 else:
460 return self.numpy().astype(dtype, copy=False)

TypeError: can't convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

我该如何解决这个问题?

我试图将 idx 更改为 idxs = idxs.cpu().numpy() 并且错误是:

TypeError                                 Traceback (most recent call last)
<ipython-input-62-e3f9951e9804> in <module>()
5
6 plt.figure(figsize=(4,4))
----> 7 plt.barh(range(len(y_pos)), np.exp(x_pos[0]))
8 plt.yticks(range(len(y_pos)), y_pos)
9

/usr/local/lib/python3.6/dist-packages/torch/tensor.py in __array__(self, dtype)
456 def __array__(self, dtype=None):
457 if dtype is None:
--> 458 return self.numpy()
459 else:
460 return self.numpy().astype(dtype, copy=False)

TypeError: can't convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

最佳答案

努力改变

idxs = np.array(idxs)

idxs = idxs.cpu().numpy()

并改变

plt.barh(range(len(y_pos)), np.exp(x_pos[0]))

plt.barh(range(len(y_pos)), np.exp(x_pos[0].cpu().numpy()))

关于python - 将 CUDA 张量转换为 NumPy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57832423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com