Googlo666 2023-10-24 09:57 采纳率: 66.7%
浏览 6

model.load_state_dict中的一个疑惑

事情如下:
最近加载预训练字典时惊讶的发现,load_state_dict pth文件中的字典长度竟然和model.state_dict,长度不一样。写了一个测试的代码如下,求帮看看:

from models.resnet import pretrained_resnet101 as resnet101
import torch.nn as nn
model,_ = resnet101(16,112,pretrained_resnet101_path='../CTEN-main/models/resnet-101-kinetics.pth')
model.fc = nn.Linear(model.fc.in_features, 400)

b = model.state_dict()
len(b)

Loading pretrained 3D ResNet-101 ../CTEN-main/models/resnet-101-kinetics.pth
626

from collections import OrderedDict
import torch
new = OrderedDict()

# new['ttt']=torch.tensor([5, 6, 7])
miss, unexp = model.load_state_dict(new, strict=False)
len(miss)

522

正常来说下面的miss长度不应该也是626吗!?

  • 写回答

3条回答 默认 最新

  • 专业研究祖传Bug编写术 全栈领域新星创作者 2023-10-24 10:08
    关注

    通常是由于模型结构发生了变化导致的。这种情况下,需要手动处理预训练字典,将其与当前模型的state_dict对应起来。可以使用del语句删除不需要的结构,或者手动添加缺失的结构。另外,需要注意的是,state_dict中的键必须与模型中的参数名称完全匹配,否则会出现Missing key(s) in state_dict的错误。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月24日

悬赏问题

  • ¥15 在edge和chrome浏览器,怎么在新标签页打开链接
  • ¥20 search.asp突然无法搜索,之前能搜索
  • ¥15 c#如何使用scottplot给已画好的自定义热度图,增加一个一定的colorbar
  • ¥15 信贷平台.用户信用评估和风险评估怎么做,希望来个做过的Java.有合作的机会
  • ¥15 IMageEN获得图形顶点坐标的问题
  • ¥50 软件PC客户端抓包,获取http请求和响应
  • ¥15 手机被安装黑客软件怎么办?
  • ¥15 Windows C++ PaddleOcr 中文模型的训练方法
  • ¥15 c# 用scottplot画 以时间为纵坐标,数值为横坐标画曲线图
  • ¥15 手机应用程序安装异常