当前位置: 代码迷 >> 综合 >> Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False
  详细解决方案

Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False

热度:124   发布时间:2023-09-28 22:11:58.0

错误描述:

用GPU训练pytorch神经网络的时候,我们经常会保存训练误差和测试误差(train loss and test loss)成npy文件,但是在保存的过程中,一不小心就保存成tensor类型的了,因为在训练的过程中loss是作为tensor进行运算的。这时候如果在CPU上用numpy.load()来加载我们保存的npy文件,就会报下面的错误。我们如果在公共的服务器上训练模型,然后在个人电脑上进行结果分析的话,就必须得解决这个问题。

RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location='cpu' to map your storages to the CPU.

解决方法:

1、重新训练网络,别在保存tensor了,保存成loss.item()。

2、如果训练时间很长,可以用下面的方法:

在GPU中运行如下程序:

loss = np.load('./loss_gpu.npy')
print(loss)for i in range(int(len(loss))):loss[i] = loss[i].cpu().detach().numpy()print(loss)
np.save('./loss_cpu.npy', loss)

 

  相关解决方案