PyTorch加载resnet_18预训练权重报错:function无load_state_dict属性
解决PyTorch加载ResNet18权重时的'function' object has no attribute 'load_state_dict'错误
错误原因
你直接调用了resnet18函数的load_state_dict方法,但resnet18是torchvision提供的模型构造函数,并非实例化后的模型对象,只有实例化的模型才具备load_state_dict属性。
正确操作步骤
- 导入依赖库
import torch from torchvision.models import resnet18
- 实例化ResNet18模型
# 若不需要torchvision自带的预训练权重,设置pretrained=False(旧版)或weights=None(新版torchvision) model = resnet18(pretrained=False)
- 加载并应用权重
# 读取权重文件得到权重字典 state_dict = torch.load('resnet_18.pth') # 给实例化后的模型加载权重 model.load_state_dict(state_dict)
额外注意事项
如果你的权重文件与torchvision默认ResNet18的层结构不一致(比如自定义了分类头),会出现键不匹配的报错,可通过以下方式处理:
# 例如删除权重字典中与模型不匹配的最后一层参数 del state_dict['fc.weight'] del state_dict['fc.bias'] # 使用strict=False忽略不匹配的层,仅加载能匹配的参数 model.load_state_dict(state_dict, strict=False)
内容的提问来源于stack exchange,提问作者iolibitz
相关产品推荐
相关产品推荐

