size mismatch问题:训练权重不匹配问题

这篇具有很好参考价值的文章主要介绍了size mismatch问题:训练权重不匹配问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在测试二阶段和三阶段模型的时候程序一直报错:

RuntimeError: Error(s) in loading state_dict for Eff:
    size mismatch for fc.weight: copying a param with shape torch.Size([18, 1000]) from checkpoint, the shape in current model is torch.Size([14, 1000]).
    size mismatch for fc.bias: copying a param with shape torch.Size([18]) from checkpoint, the shape in current model is torch.Size([14]).

这个问题是参数的权重输出维度不同,查阅网上很多资料,也就是权重的fc层的参数不同,大佬都说把这个fc层忽略就好了。但是我找了好多感觉看不懂,最终找到了下面博主的博客。

https://blog.csdn.net/weixin_44966641/article/details/120083303

根据博主说的问题进行操作以后还是发现继续报错。

发现自己添加代码的位置错了:

eff_cls2(inner_model=Eff(num_classes=2),
         ckpt_path="D:\\a\\nzb_test-master\\nzb_test-master\\eff\\cls2.pth",
         data_pool=data_pool)

刚开始加在这里发现继续报错,问题一直得不到解决,然后就继续看自己的报错:

Traceback (most recent call last):
  File "D:/a/nzb_test-master/nzb_test-master/test1.py", line 44, in <module>
    data_pool=data_pool)
  File "D:\a\nzb_test-master\nzb_test-master\process.py", line 318, in __init__
    super().__init__(inner_model, ckpt_path, data_pool)
  File "D:\a\nzb_test-master\nzb_test-master\process.py", line 39, in __init__
    self.prepare()
  File "D:\a\nzb_test-master\nzb_test-master\process.py", line 45, in prepare
    self.inner_model.load_state_dict(ckpt)
  File "D:\ananconda\envs\yolo\lib\site-packages\torch\nn\modules\module.py", line 1498, in load_state_dict
    self.__class__.__name__, "\n\t".join(error_msgs)))

发现错误在process里面的,于是我就进去找到了prepare函数,发现在里面找到了自己需要的东西,就根据博主的方法把下面两行代码加了进去。

ckpt.pop("fc.bias")
ckpt.pop("fc.weight")

你的报错是什么,这里就些什么就好了,这个语句的意思是直接把权重当中的这两个层直接忽略掉,于是就不会进行报错了。

但是我的代码还在报错,没办法就回去继续看,发现我在引用模型的时候没有加strict=False,这个语句就是指忽略掉模型和参数文件中不匹配的参数。我的代码里面并没有,于是就这一句也加在了里面,代码就跑通了。

修改后的代码如下:

def prepare(self):
    self.inner_model.cuda()
    ckpt = torch.load(self.ckpt_path)
    ckpt.pop("fc.bias")
    ckpt.pop("fc.weight")
    self.inner_model.load_state_dict(ckpt,strict=False)
    self.inner_model.eval()

到此,错误完全解决了!!!!!!文章来源地址https://www.toymoban.com/news/detail-400430.html

到了这里,关于size mismatch问题:训练权重不匹配问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [PyTorch]预训练权重的转换

            众所周知,使用大量数据预训练后的骨干网络可以提升整个模型的泛化能力,而我们如果将网络的骨干网络替换后则不能直接使用原来的权重。这个项目的作用是在你替换骨干网络后可以将网络预训练权重一并“偷”过来。         下给结论 :将DeeplabV3+的骨干网

    2023年04月21日
    浏览(32)
  • torch中如何使用预训练权重

    解释说明:目前很多主流的网络模型主要包含backbone+其他结构(分类,回归),那么如何在训练自己的网络模型时使用别人已经训练好的网络模型权重呢??本文以Resnet50为例,构建一个基于resnet50的网络模型预训练过程。 torchvision中封装了Resnet系列、vgg系列、inception系列等网络

    2024年02月07日
    浏览(35)
  • 模型权重和深度学习训练框架之间的关系

    通常我们可以看到有Caffe或Pytorch或TensorFlow的模型参数文件 不同的团队可能会使用不同的深度学习训练框架, 然后使用其 内部的模型权重保存函数 进行保存, 以便之后 自己的复用 或 发布开源 , 让别人使用自己已经训练好的模型权重, 在其基础上进一步做改进或训练 那么该团

    2024年02月11日
    浏览(51)
  • YOLO训练得到权重后无法检测detect目标

    通过自己制造数据集,跑完train.py文件后,得到自己的权重文件 将权重文件带入detect.py文件中,发现可以运行,但是无法识别图片和视频中的目标 3.opencv-python版本太高了,看了一眼,果然版本都到4.6了,猜想opencv-python版本问题,结果——还是不行 https://blog.csdn.net/adai5210/ar

    2024年02月12日
    浏览(35)
  • Yolov8改进模型后使用预训练权重迁移学习训练自己的数据集

    yolov8 github下载 1、此时确保自己的数据集格式是yolo 格式的(不会的去搜教程转下格式)。 你的自制数据集文件夹摆放 主目录文件夹摆放 自制数据集data.yaml文件路径模板 2、把data.yaml放在yolov8–ultralytics-datasets文件夹下面 3、然后模型配置改进yaml文件在主目录新建文件夹v8_

    2024年02月06日
    浏览(49)
  • 【Segment Anything Model】论文+代码实战调用SAM模型预训练权重+相关论文

    上篇文章已经全局初步介绍了SAM和其功能,本篇作为进阶使用。点击订阅专栏查看专栏列表和对应知识点,本文为seg SAM系列文章,在持续更新。

    2024年02月05日
    浏览(48)
  • 【下载预训练模型失败】OSError: Consistency check failed: file should be of size xxx but has size xxx

    这个错误表明在下载预训练模型文件pytorch_model.bin时出现了一致性检查失败。下载的文件大小与期望的文件大小不一致。 如果在使用vpn,那就先关闭代理。 代码中加上force_download=True和resume_download=False参数,强制重新下载模型文件并禁用断点续传。 示例: 如果问题仍然存在,

    2024年02月06日
    浏览(43)
  • 关于yolov5训练时参数workers和batch-size的理解

    yolov5的训练很简单,下载好仓库,装好依赖后,只需自定义一下data目录中的yaml文件就可以了。这里我使用自定义的my.yaml文件,里面就是定义数据集位置和训练种类数和名字。 一般训练主要需要调整的参数是这两个: workers 指数据装载时cpu所使用的线程数,默认为8。代码解

    2023年04月13日
    浏览(34)
  • 【pytorch】使用训练好后的模型权重,在验证集上输出分类的混淆矩阵并保存错误图片

    在机器学习领域,混淆矩阵是一个非常有用的指标,它可以帮助我们更好地理解模型在验证集上的表现。本文介绍了如何使用pytorch框架,利用训练好后的模型权重,在验证集上输出分类的混淆矩阵,并保存错误图片的方法。 首先,我们需要准备一个pytorch框架的模型,并将模

    2024年02月13日
    浏览(38)
  • 剑指YOLOv5改进损失函数,具有自适应阈值的 Slide 权重函数,使模型在训练期间更加关注硬样本

    💡 本篇内容 :剑指YOLOv5改进损失函数,设计具有自适应阈值的 Slide 权重函数,使模型在训练期间更加关注硬样本 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv5 按步骤操作运行改进后的代码即可 💡:重点:该 专栏 《剑指YOLOv5原创改进》只更新改进 YOLOv5 模型的内容 剑

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包