raise RuntimeError(‘Error(s) in loading state_dict for {}:\n\t{}‘.format( RuntimeError: Error(s)..报错

简介: 即load_state_dict(fsd,strict=False) 属性strict;当strict=True,要求预训练练权重层数的键值与新构建的模型中的权重层数名称完全吻合;

今天在跑基于VGG16的迁移学习的时候,遇到错误。


 raise RuntimeError('Error(s) in loading state_dict for {}:\n\t{}'.format(
RuntimeError: Error(s) in loading state_dict for VGG16_SE:

6379328e0a9b4a678ac6434a45fdaae3.png


原因


加载预训练权重的过程中因为没使用VGG的其他的一些层的预训练权重,bias。产生了一个错误。


解决方案


我们只需要加一个strict=False这个参数


load_state_dict(fsd,strict=False) 属性strict;当strict=True,要求预训练练权重层数的键值与新构建的模型中的权重层数名称完全吻合;


如果我们采用strict=False就能够完美的解决这个问题。也就说与训练权重中与新构建网络中匹配层的键值就进行使用,没有的就默认初始化。


如果你是用的是 model.load_state_dict(torch.load(’ '))

 model.load_state_dict(torch.load('./xxx.pt'))


改为


 model.load_state_dict(torch.load('./xxx.pt'),strict=False)


如果你是用的是 model.load_state_dict(torch.load(’ '))


torch.load('xxx.pt')


改为


torch.load('xx.pth'),False


拓展


很多教程说名字不匹配直接添加False参数即可,但是这里需要注意一个大坑。


如果模型的键值和网络的键值完全不匹配,那么模型就没有加载预训练参数,虽然不再报错。


该False参数作用在于 非严格匹配加载模型,可以下面几种情况进行分析。


1. 模型包含网络的部分参数


比如说模型是resnet101模型,你现在的网络是resnet50。再假设resnet50的参数名包含在resnet101的参数中,那么直接使用False会为你的网络resnet50加载键值相同的参数。这样就避免了对resnet101的每个键对值进行循环匹配,看是否是resnet50需要的。


2. 模型完全不包含网络的参数


情况如1,模型有100个参数,都包含’module.’ ,网络也有100个参数,都没有’module.’ 。这种情况下如果参数设置为False,会发现没有任何键值能匹配上,因此网络就不会加载任何参数。


3. 再介绍一个False使用场景


比如蒸馏网络PISR中,教师网络包含Encoder和Decoder两部分,学生网络由其中的Decoder部分组成,所以在训练学生网络时,如果要加载教师网络保存的预训练模型,设置False会自动识别Decoder部分键值相同,然后加载。


综上,设置False参数后依旧是按照键值查询加载参数的,有多少键值匹配,就加载多少模型的参数。

目录
相关文章
|
消息中间件 存储 监控
|
机器学习/深度学习 存储 编解码
Open3d系列 | 3. Open3d实现点云上采样、点云聚类、点云分割以及点云重建
Open3d系列 | 3. Open3d实现点云上采样、点云聚类、点云分割以及点云重建
13936 1
Open3d系列 | 3. Open3d实现点云上采样、点云聚类、点云分割以及点云重建
|
芯片 存储 C语言
STM32F103标准外设库——固件库 (三)
STM32F103标准外设库——固件库 (三)
1071 0
STM32F103标准外设库——固件库 (三)
|
机器学习/深度学习 缓存 并行计算
NVIDIA Tesla GPU系列P4、T4、P40以及V100参数性能对比
NVIDIA Tesla系列GPU适用于高性能计算(HPC)、深度学习等超大规模数据计算,Tesla系列GPU能够处理解析PB级的数据,速度比使用传统CPU快几个数量级,NVIDIA Tesla GPU系列P4、T4、P40以及V100是Tesla GPU系列的明星产品,云服务器吧分享NVIDIA.
83881 1
加载模型出现-RuntimeError: Error(s) in loading state_dict for Net:unexpected key(s) in state_dict: XXX
加载模型出现-RuntimeError: Error(s) in loading state_dict for Net:unexpected key(s) in state_dict: XXX
877 0
|
6月前
|
Ubuntu Linux 定位技术
在Ubuntu 20.04系统安装Matlab R2021a步骤
希望你可以充分享受这场旅行,从无知的迷雾中找到通向智慧的路。好好装备你的 Linux 旅行箱吧,因为还有很多其他的知识世界等待你去探索和征服。在知识的海洋里,只有勇敢的探索者才能找到自己的道路。快乐旅行!
547 23
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
飞桨x昇腾生态适配方案:00_整体方案介绍
本文详细介绍PaddlePaddle与NPU的适配工作,涵盖训练与推理支持、性能优化及离线推理方案。PaddleCustomDevice作为适配层,支持主流模型(详见飞桨-昇腾模型列表),多数性能媲美V100,部分调优模型接近0.8*A800。硬件适配主要针对A2芯片,A1兼容但310系列建议离线推理。提供常用模型仓链接及整体方案导览,包括环境准备、算子适配、性能调优和Paddle转ONNX/OM等内容。
305 0
|
6月前
|
机器学习/深度学习 Docker 容器
飞桨x昇腾生态适配方案:01_基础环境准备
本指南详细介绍在ARM环境中准备CANN环境、安装Paddle深度学习框架及PaddleCustomDevice的过程。首先下载并加载CANN镜像,启动Docker容器;接着通过日构建包或源码编译安装PaddlePaddle和PaddleCustomDevice;可选更新CANN版本时需注意环境变量配置与路径设置。最后提供基础功能检查方法,包括硬件后端、版本验证及框架健康检查,确保环境搭建成功。
381 0
|
10月前
|
机器学习/深度学习 算法 自动驾驶
《深度剖析:Q-learning为何被归为无模型强化学习算法》
Q-learning是无模型的强化学习算法,不依赖环境模型,而是通过与环境实时交互学习最优策略。它通过更新状态-动作值函数(Q函数)来评估行动价值,适用于多变环境,具有灵活性和简单性优势。然而,Q-learning探索效率较低,样本复杂性高,需大量尝试才能找到有效策略。这种特性使其在实际应用中既有机会也有挑战。
507 24
|
8月前
|
JSON 数据格式
基于 PAI-ArtLab 使用 ComfyUI 生成高精度人物手办
通过一张照片,即可在PAI ArtLab平台上生成专属手办形象,让女生更萌、男生更帅!实验分三步:首先登录阿里云完成实名认证并进入PAI ArtLab平台领取免费试用资源;接着使用ComfyUI加载工作流,上传半身肖像照生成初步结果;最后通过提示词或更换模型进阶创作,如添加太阳镜或切换二次元风格。整个过程简单快捷,约需2-3分钟,支持查看任务进度和语言切换。