错误描述:
当用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)