pytorch上锁住整个网络结构的参数,报错:ValueError: optimizing a parameter that doesn't require gradients

使用场景:最近在复现《Triplet Distillation for deep face recognition》的蒸馏方法,使用深度学习框架pytorch。两个网络,一个网络要固定住参数,loss不回传,参数不更新;另一个网络使用第一个网络的loss进行loss计算,进行正常的网络更新学习;

网上找到一些方法:参考:https://blog.csdn.net/AManFromEarth/article/details/81071823

#对于模型的每个权重,使其不进行反向传播,即固定参数
for param in model.parameters():
    param.requires_grad = False

然后我自己就尝试了一番:

checkpoint = torch.load(pt_path)
        state_dict = {k.replace("module.", ""): v for k, v in checkpoint.items()}
        model.load_state_dict(state_dict)
        for k, v in model.named_parameters():
            print(k)
            v.requires_grad = False  # 固定参数

然后在优化器的位置报错:

报错位置:

self.optimizer = optim.SGD(filter(lambda p: p.requires_grad, self.model.parameters()),
                #                                   lr=conf.lr, momentum=conf.momentum)

报错形式: 

ValueError: optimizing a parameter that doesn't require gradients

错误原因:根据对参考文献的理解,是因为我将所有的参数锁死了,没有参数用于回传更新出的错,所以,我直接将要进行迁移学习(蒸馏)模型的参数放入这里:

 self.optimizer = optim.SGD(self.model_mobile.parameters(),
                             lr = conf.lr, momentum = conf.momentum)

注:self.model_mobile是需要进行迁移学习的模型;

同时在将模型参数传入gpu后,固定参数的大网络,直接使用了测试模式(self.model.eval())进行特征图提取,然后传入loss函数中,进行loss值计算;

这样就成功锁着了网络参数;

验证网络参数锁没锁住的方法,我是查看的测试集上的测试精度,(感觉不太有说服力,大家有好的方法可以推荐下)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
报错"ValueError: too many values to unpack (expected 2)"意味着在解包时接收到的值数量超过了预期的数量。这个错误通常发生在使用多个变量解包一个返回值时。在你提供的引用中,有几个例子也遇到了类似的错误。解决这个问题的方法是确保解包的变量数量与返回值的数量相匹配。 对于你提到的yolact网络训练时出现的错误"ValueError: too many values to unpack (expected 2)",这可能是因为在某个地方你尝试使用多个变量去解包一个预期只有两个值的返回值。为了解决这个问题,你可以检查代码中是否有解包操作,并确保解包的变量数量与返回值的数量一致。 另外,你还可以查看报错信息中的具体位置,找到引发报错的代码行,并检查解包操作是否正确。如果你发现解包的变量数量多于预期,可以通过增加或减少解包的变量来调整数量,以使其与返回值相匹配。 总结来说,当遇到"ValueError: too many values to unpack (expected 2)"这个错误时,需要检查代码中的解包操作,确保解包的变量数量与返回值的数量一致。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python 同时遍历两个列表报错ValueError: too many values to unpack (expected 2)](https://blog.csdn.net/qq_40967086/article/details/127178434)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [关于 Python opencv 使用中的 ValueError: too many values to unpack](https://download.csdn.net/download/weixin_38661650/13995213)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [pytorch报错ValueError: too many values to unpack (expected 4)](https://blog.csdn.net/crystallilili/article/details/126798100)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫与橙子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值