加载SSD300模型Checkpoint时遇CUDA反序列化错误,如何解决?
解决方法
这个错误的核心原因是你加载的模型 checkpoint 是在带 CUDA 的设备上保存的,参数默认关联了 CUDA 设备,但当前运行环境没有可用的 CUDA,直接加载会触发设备不匹配的问题。
只需要修改 torch.load() 这一行代码,添加 map_location 参数,指定将 checkpoint 映射到当前可用的计算设备即可:
# set the computation device device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') # Load model checkpoint checkpoint_path = 'checkpoints/checkpoint_ssd300.pth.tar' # 关键修改:添加 map_location=device,自动适配当前设备 checkpoint = torch.load(checkpoint_path, map_location=device) start_epoch = checkpoint['epoch'] + 1 print('\nLoaded checkpoint from epoch %d.\n' % start_epoch) model = checkpoint['model'] model = model.to(device) model.eval()
关键说明
map_location=device会自动根据你定义的device(CUDA 或 CPU)来加载 checkpoint 参数,避免设备不匹配的问题- 不需要手动写死
map_location=torch.device('cpu'),用已定义的device可以让代码在有 CUDA 和无 CUDA 的环境下都能正常运行
内容的提问来源于stack exchange,提问作者Rust_Eze
相关产品推荐
相关产品推荐

