pytorch在gpu训练好的模型再次cpu使用时需要注意dict的keys多一个module,torch.load设置map_location=‘cpu‘

参考:https://blog.csdn.net/qq_40206371/article/details/120602334,https://www.ptorch.com/news/74.html

确定计算过程中的参数运行位置

若在cpu训练一定要将所有参数都在cpu上运行,即使是模型中某些函数中的临时参数,这个也不需要太担心,运行时若位置不对会报错,然后查找修改就行了

查看pth模型参数

参考:https://blog.csdn.net/hugvgngj/article/details/111186170

import torch  # 命令行是逐行立即执行的
content = torch.load('t.pth',map_location = torch.device('cpu'))
print(content.keys())   # keys()

GPU和CPU训练的模型之间不能直接加载参数

在gpu上训练好的参数,若在cpu的机器上使用参数,加载时需要添加如下
map_location=‘cpu’

model.load_state_dict(torch.load('*.pth',map_location='cpu')

查看数据是否在gpu上

参考:https://blog.csdn.net/jzwong/article/details/110955851

### 模型的位置
model = model.cuda()
print(next(model.parameters()).device)  # 输出:cuda:
 
model = model.cpu()
print(next(model.parameters()).device)  # 输出cpu
### 数据位置
data = data.cuda()
print(data.device)  # 输出:cuda:0
 
data = data.cpu()
print(data.device)  # 输出:cpu

保存的参数名称差一个Module.导致的不匹配问题

参考:https://blog.csdn.net/qq_32998593/article/details/89343507
如下图中,导致该问题的原因参考中也提到,模型应该是在DataParallel模式下面,就算只是cpu的笔记本电脑,若加载好后,也可以添加下面这个代码,可以正常运行,但这个代码要在加载参数文件之前,这种并行加载会让网络字典的keys前多一个module.

model = torch.nn.DataParallel( model)  # 在前权重关键字前就会出现module.
model.load_state_dict(torch.load('net.pth')

pytorch在gpu训练好的模型再次cpu使用时需要注意dict的keys多一个module,torch.load设置map_location=‘cpu‘_第1张图片

你可能感兴趣的:(torch,一些自己的小用法,深度学习)