【pytorch】named_parameters()、parameters()、state_dict()==>给出网络的名字和参数的迭代器

torch中存在3个功能极其类似的方法,它们分别是model.parameters()、model.named_parameters()、model.state_dict(),下面就具体来说说这三个函数的差异:

1.首先,说说比较接近的model.parameters()和model.named_parameters()。这两者唯一的差别在于,
named_parameters()返回的list中,每个元组(与list相似,只是数据不可修改)打包了2个内容,分别是layer-name和layer-param(网络层的名字和参数的迭代器)
而parameters()只有后者layer-param(参数的迭代器)

2.后面只谈model.named_parameters()和model.state_dict()间的差别。

它们的差异主要体现在3方面:

  1. 返回值类型不同
  2. 存储的模型参数的种类不同
  3. 返回的值的require_grad属性不同
named_parameters()state_dict()
将layer_name : layer_param的键值信息打包成一个元祖然后再存到list当中将layer_name : layer_param的键值信息存储为dict形式
只保存可学习、可被更新的参数,model.buffer()中的参数不包含在model.named_parameters()中存储的是该model中包含的所有layer中的所有参数
require_grad属性都是True存储的模型参数tensor的require_grad属性都是False

为何model.parameters()迭代出来的所有参数的require_grad属性都是True,因为它们在被创建时,默认的require_grad就是True。这也符合逻辑,即,使用nn.Parameter()创建的变量是模型参数,本就是要参与学习和更新的;而不参与模型学习和更新的呢?我们再看一个例子:

if self.track_running_stats:
            self.register_buffer('running_mean', torch.zeros(num_features))
            self.register_buffer('running_var', torch.ones(num_features))
            self.register_buffer('num_batches_tracked', torch.tensor(0, dtype=torch.long))

定义的三个参数是不参与模型学习的,所以定义在buffer中,buffer的定义方法为self.register_buffer(),所以模型不参与学习和更新的参数是这样定义的、

pytorch中state_dict()和named_parameters()的差别,以及model.buffer/model.parameter_甘如荠-CSDN博客_named_parameters

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这个错误是因为你尝试在一个generator对象上调用named_parameters()方法,而generator对象没有该方法。\[1\]named_parameters()方法是用于获取模型的参数的生成器(generator)对象,而不是直接调用。如果你想要获取模型的参数,你可以使用for循环或者.next()方法来逐个读取参数值。另外,你还可以使用state_dict()方法来获取模型的参数字典。\[1\]如果你想要加载保存的网络模型,你应该使用model.load_state_dict()方法来加载参数字典,而不是直接使用torch.load()方法。\[2\]这样可以确保正确地加载模型的参数。此外,torch.save()方法在模型版本发生变化时可能无法重新加载存储好的模型,因此建议使用save_pretrained()和from_pretrained()方法来保存和加载模型。\[3\] #### 引用[.reference_title] - *1* *3* [Pytorch模型存储心得小记](https://blog.csdn.net/GJ_0418/article/details/122295368)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [pytorch载入模型时出现错误AttributeError Generator object has no attribute copy](https://blog.csdn.net/LLLLUFFY/article/details/106561536)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

马鹏森

太谢谢了

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

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

打赏作者

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

抵扣说明:

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

余额充值