TypeError:无法将CUDA张量转换为numpy。使用Tensor.cpu()首先将张量复制到主机内存(fastai)

时间:2020-04-15 18:39:44

标签: numpy pytorch cpu

我在这里遵循代码:

https://www.kaggle.com/tanlikesmath/diabetic-retinopathy-with-resnet50-oversampling

但是,在指标计算过程中,出现以下错误:

concurrent.futures._base.TimeoutError

以下是指标和模型:

File "main.py", line 50, in <module>
 learn.fit_one_cycle(4,max_lr = 2e-3)
...
File "main.py", line 39, in quadratic_kappa
    return torch.tensor(cohen_kappa_score(torch.argmax(y_hat,1), y, weights='quadratic'),device='cuda:0')
...
File "/pfs/work7/workspace/scratch/ul_dco32-conda-0/conda/envs/resnet50/lib/python3.8/site-packages/torch/tensor.py", line 486, in __array__
    return self.numpy()
TypeError: can't convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

正如在讨论def quadratic_kappa(y_hat, y): return torch.tensor(cohen_kappa_score(torch.argmax(y_hat,1), y, weights='quadratic'),device='cuda:0') learn = cnn_learner(data, models.resnet50, metrics = [accuracy,quadratic_kappa]) learn.fit_one_cycle(4,max_lr = 2e-3) 中所说的那样,我必须将数据带回到https://discuss.pytorch.org/t/typeerror-can-t-convert-cuda-tensor-to-numpy-use-tensor-cpu-to-copy-the-tensor-to-host-memory-first/32850/6。但是我有点不知道该怎么做。

我试图在所有指标中添加cpu,但到目前为止仍无法解决。

1 个答案:

答案 0 :(得分:1)

我假设yy_hat都是CUDA张量,这意味着您需要将cohen_kappa_score而不是仅仅将它们都带到CPU。

def quadratic_kappa(y_hat, y):
    return torch.tensor(cohen_kappa_score(torch.argmax(y_hat.cpu(),1), y.cpu(), weights='quadratic'),device='cuda:0')
    #                                                        ^^^         ^^^

在已经在CPU上的张量上调用.cpu()无效,因此在任何情况下都可以安全使用。