解决AttributeError: ‘DataParallel‘ object has no attribute ‘xxxx_fc1‘

这篇具有很好参考价值的文章主要介绍了解决AttributeError: ‘DataParallel‘ object has no attribute ‘xxxx_fc1‘。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

训练模型时,分阶段训练,第二阶段加载第一阶段训练好的模型的参数,接着训练
第一阶段训练,含有代码

    if (train_on_gpu):
        if torch.cuda.device_count() > 1:
            net = nn.DataParallel(net)
        net = net.to(device)

第二阶段训练,含有代码

    if (train_on_gpu):
        if torch.cuda.device_count() > 1:
            netT = nn.DataParallel(netT)
            netS = nn.DataParallel(netS)
        netT = netT.to(device)
        netS = netS.to(device)
-----
    orig_state_dict = torch.load("../models/model.pth")['net']
    new_state_dict = OrderedDict()
    for k, v in orig_state_dict.items():
        name = k.replace('module.', '')
        new_state_dict[name] = v
    netT.load_state_dict(new_state_dict)
-----    
    for param in netS.parameters():
        param.requires_grad = True
    #对源模型 netS 的 pose_fc1 层所有参数都设置为不需要进行反向传播更新。
    for param in netS.pose_fc1.parameters():
        param.requires_grad = False

结果报错

RuntimeError: Error(s) in loading state_dict for DataParallel: Missing key(s) in state_dict: "module.feat.block1.layer.0.conv1.weight", ...........

解决方案:

注释掉nn.DataParallel()

    if (train_on_gpu):
        if torch.cuda.device_count() > 1:
        	pass
            #netT = nn.DataParallel(netT)
            #netS = nn.DataParallel(netS)
        netT = netT.to(device)
        netS = netS.to(device)
-----
    orig_state_dict = torch.load("../models/model.pth")['net']
    new_state_dict = OrderedDict()
    for k, v in orig_state_dict.items():
        name = k.replace('module.', '')
        new_state_dict[name] = v
    netT.load_state_dict(new_state_dict)
-----    
    for param in netS.parameters():
        param.requires_grad = True
    #对源模型 netS 的 pose_fc1 层所有参数都设置为不需要进行反向传播更新。
    for param in netS.pose_fc1.parameters():
        param.requires_grad = False

原因分析

可能是模型在第一阶段和第二阶段训练设置不一致导致的问题,比如第一阶段用双卡训练,第二阶段用单卡训练
这时不能第一阶段和第二阶段都用nn.DataParallel()

net加载的网络结构没有"module",而第一阶段保存的模型因为使用了net = nn.DataParallel(net),保存的参数的key有"module",
这个时候如果我们执行 netT.load_state_dict(new_state_dict)
会报错missing keys .....Unexpected key(s) in state_dict: "module.features.......
于是按网络教程加一个False, netT.load_state_dict(new_state_dict,False)
于是就报错题目中的问题了解决AttributeError: ‘DataParallel‘ object has no attribute ‘xxxx‘
在这里实际上第二阶段加载的时候就要把key前面的"module"去掉,才能正确加载模型参数到网络里面,继续训练
另外注释掉nn.DataParallel()即可

解决AttributeError: ‘DataParallel‘ object has no attribute ‘xxxx_fc1‘,python,机器学习,深度学习,人工智能,python文章来源地址https://www.toymoban.com/news/detail-615911.html

到了这里,关于解决AttributeError: ‘DataParallel‘ object has no attribute ‘xxxx_fc1‘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 已解决AttributeError: ‘str‘ object has no attribute ‘read‘

    已解决(json.load()读取json文件报错)AttributeError: ‘str‘ object has no attribute ‘read‘ 粉丝群里面的一个粉丝在用Python读取json文件的时候,出现了报错(跑来找我求助,然后顺利帮助他解决了,顺便记录一下希望可以帮助到更多遇到这个bug不会解决的小伙伴),报错信息和代码

    2024年02月12日
    浏览(46)
  • AttributeError: ‘NoneType‘ object has no attribute ‘split‘的解决办法

    在用KMeans算法训练数据的时候,报错如下: 经过各种途径的查询,有些回答建议尝试对sklearn、numpy修改版本。经过验证,sklearn与numpy版本与建议者所要修改的版本一致,故没有采纳。 经过自己的仔细观察,因为在使用KMeans算法训练数据代码之前,只有一行代码,那就是 故尝

    2024年02月13日
    浏览(40)
  • AttributeError:‘CartPoleEnv‘ object has no attribute ‘seed‘解决方案

    在尝试运行gym的classic control模块中的Cart Pole的相关代码时,想用随机种子重置一下环境,结果不停的报AttributeError:\\\'CartPoleEnv\\\' object has no attribute \\\'seed\\\'的错,查看gym的官方文档后也没有得出什么结果。后来,意外发现了在另外一台机器上运行该代码的警告信息: gym/core.py:256:

    2024年02月15日
    浏览(40)
  • 解决出现的AttributeError: ‘dict‘ object has no attribute ‘encode‘错误

    这个错误通常表示您正在尝试对字典类型的对象使用字符串编码方法。但是字典类型的对象没有编码属性。 通常可能需要检查代码中哪些部分试图将字典转换为字符串并应用编码。例如,在以下代码中: 这个错误就会出现,因为字典类型的对象没有encode() 方法 解决方法是将字

    2024年02月11日
    浏览(46)
  • 已解决AttributeError: ‘str‘ object has no attribute ‘decode‘方案二

    已解决AttributeError: ‘str‘ object has no attribute ‘decode‘解决方法异常的正确解决方法,亲测有效!!! AttributeError: ‘str‘ object has no attribute ‘decode‘ AttributeError: ‘str’ object has no attribute \\\'decode’错误通常发生在Python 3版本中,当尝试对字符串对象使用decode()方法时。 下滑查

    2024年02月07日
    浏览(36)
  • 【Python】成功解决AttributeError: ‘list‘ object has no attribute ‘replace‘

    【Python】成功解决AttributeError: ‘list’ object has no attribute ‘replace’ 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创作高质量博文(平均质量分92+),分享更多

    2024年03月25日
    浏览(42)
  • 【Python】成功解决AttributeError: ‘list‘ object has no attribute ‘split‘

    【Python】成功解决AttributeError: ‘list‘ object has no attribute ‘split‘ 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创作高质量博文(平均质量分92+),分享更多关

    2024年04月14日
    浏览(54)
  • AttributeError: ‘bytes‘ object has no attribute ‘encode‘异常解决方案

    AttributeError: \\\'bytes\\\' object has no attribute \\\'encode\\\'是:“字节”对象没有属性的编码的意思。 很明显,是编码格式的问题,例如:已经是byte格式的字符串类型,二次进行encode的时候就会出现这个bug,示例如下: 异常的报错效果如下: 其实异常说的是比较明显的,属性误差:【At

    2024年02月11日
    浏览(39)
  • Selenium报错 AttributeError: ‘dict‘ object has no attribute ‘xx‘ (已解决)

    selenium的查找元素并点击:self.driver.find_element_by_id(\\\"xx\\\").click() 执行这句时报错:AttributeError: \\\'dict\\\' object has no attribute \\\'click\\\',断言发现,find_element_by_id确实返回了一个dict类型。 网上寻找答案后,解决如下: 将安装的selenium 4.0版本,降为3.141.0版本即可。 参考:https://stackoverflo

    2024年02月12日
    浏览(38)
  • 完美解决AttributeError: ‘NoneType‘ object has no attribute ‘split‘ 报错处理

    已解决AttributeError: ‘NoneType’ object has no attribute ‘split’ 报错处理 AttributeError: ‘NoneType‘ object has no attribute ‘split‘ 这个错误通常出现在使用 NoneType 对象调用 split() 方法时。NoneType 是 Python 中表示空值的类型。 下滑查看解决方法 产生该错误的原因可能是你没有正确地初始

    2024年02月12日
    浏览(54)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包