PyTorch加载模型state_dict报错:Expected state_dict to be dict-like
问题分析与解决
你遇到的错误核心原因是:model.load_state_dict()方法要求传入的是模型的state_dict字典对象,但你直接传入了模型文件的路径字符串,所以触发了类型错误。
正确的加载步骤
- 先用
torch.load()读取保存的模型文件,得到state_dict字典 - 将该字典传入
model.load_state_dict()
修正后的加载代码
# 先加载state_dict字典 state_dict = torch.load('01.Code/models/SNNNotEncoded.pth') # 再加载到模型中 model.load_state_dict(state_dict)
额外注意事项
- 加载模型前,必须先实例化一个和保存时结构完全一致的模型对象,示例如下:
# 假设你的模型类是SNNModel,先完成实例化 model = SNNModel() # 再执行加载代码 - 如果训练和加载使用不同设备(比如GPU训练、CPU加载),可以在
torch.load中指定map_location参数适配:state_dict = torch.load('01.Code/models/SNNNotEncoded.pth', map_location='cpu')
原错误信息:
Traceback (most recent call last): File
"/home/demaisch/git/ros_workspaces/demaisch_ws/PythonFIles/SNNtrainNotEncoded.py",
line 26, in
model.load_state_dict('01.Code/models/SNNNotEncoded.pth')
File
"/home/demaisch/.local/lib/python3.8/site-packages/torch/nn/modules/module.py",
line 1994, in load_state_dict
raise TypeError("Expected state_dict to be dict-like, got {}.".format(type(state_dict))) TypeError: Expected state_dict to be
dict-like, got <class 'str'>
内容的提问来源于stack exchange,提问作者tridentifer
相关产品推荐
相关产品推荐

