Pytorch model中的遍历模型的参数

Pytorch获取神经网络各层的参数名称及参数值 model.children()函数、model.state_dict()函数、model.parameters()函数和models.named_parameters()函数的实例演示。 阅读详情

Pytorch model中的遍历模型的参数

0、model.named_parameters()

return:返回model的所有参数的(name, tensor)的键值对。可以修改参数的requires_grad属性。

用法 : 常用于对网络的参数进行一些特殊的处理(比如 fine-tuning)。

print(type(model.named_parameters()))  # 返回的是一个generator
 
for para in model.named_parameters(): # 返回的每一个元素是一个元组 tuple 
    '''
    是一个元组 tuple ,元组的第一个元素是参数所对应的名称,第二个元素就是对应的参数值
    '''
    print(para[0],'\t',para[1].size())
 #####结果########
'''
conv1.weight     torch.Size([32, 3, 3, 3])
conv1.bias       torch.Size([32])
conv2.weight     torch.Size([32, 3, 3, 3])
conv2.bias       torch.Size([32])
dense1.weight    torch.Size([128, 288])
dense1.bias      torch.Size([128])
dense2.weight    torch.Size([10, 128])
dense2.bias      torch.Size([10])
'''
no_decay = ['bias', 'LayerNorm.weight']
optimizer_grouped_parameters = [
        {'params': [p for n, p in model.named_parameters() if not any(nd in n for nd in no_decay)], 'weight_decay': 1e-2},
        {'params': [p for n, p in model.named_parameters() if any(nd in n for nd in no_decay)], 'weight_decay': 0.0}
]

# AdamW是实现了权重衰减的优化器
optimizer = AdamW(optimizer_grouped_parameters, lr=1e-5)

1、model.parameters()

return : 返回model的所有参数的tensor。可以修改参数的requires_grad属性。

用法 : 主要提供给optimizer。

optimizer = torch.optim.Adam(model.parameters(), args.learning_rate, betas=(args.momentum, 0.999))
print(type(model.parameters()))  # 返回的是一个generator
 
for para in model.parameters():
    print(para.size())  # 只查看形状
    
#####结果########
'''
torch.Size([32, 3, 3, 3])
torch.Size([32])
torch.Size([32, 3, 3, 3])
torch.Size([32])
torch.Size([128, 288])
torch.Size([128])
torch.Size([10, 128])
torch.Size([10])
'''

从这里可以看出,其实这个state_dict方法所得到结果差不多,不同的是,model.parameters()方法返回的是一个生成器generator,每一个元素是从开头到结尾的参数,parameters没有对应的key名称,是一个由纯参数组成的generator,而state_dict是一个字典,包含了一个key。

2、model.state_dict()

pytorch 中的 state_dict 是一个简单的python的字典对象,将每一层与它的对应参数建立映射关系.(如model的每一层的weights及偏置等等)。这个方法的作用一方面是方便查看某一个层的权值和偏置数据,另一方面更多的是在模型保存的时候使用。

return : 返回model的参数的(name, tensor)的键值对字典,参数的requires_grad=false,不可以修改参数的requires_grad属性。

用法 : 常用于保存模型和加载模型的时候使用。

2.1 Module的层的权值以及bias查看
print(type(model.state_dict()))  # 查看state_dict所返回的类型,是一个“顺序字典OrderedDict”
 
for param_tensor in model.state_dict(): # 字典的遍历默认是遍历 key,所以param_tensor实际上是键值
    print(param_tensor,'\t',model.state_dict()[param_tensor].size())

#####结果########
'''
conv1.weight     torch.Size([32, 3, 3, 3])
conv1.bias       torch.Size([32])
conv2.weight     torch.Size([32, 3, 3, 3])
conv2.bias       torch.Size([32])
dense1.weight    torch.Size([128, 288])
dense1.bias      torch.Size([128])
dense2.weight    torch.Size([10, 128])
dense2.bias      torch.Size([10])
'''
2.2 优化器optimizer的state_dict()方法

优化器对象Optimizer也有一个state_dict,它包含了优化器的状态以及被使用的超参数(如lr, momentum,weight_decay等)

optimizer = SGD(model.parameters(),lr=0.001,momentum=0.9)
for var_name in optimizer.state_dict():
    print(var_name,'\t',optimizer.state_dict()[var_name])

#####结果########
'''
state    {}
param_groups     [{'lr': 0.001, 
                   'momentum': 0.9,
                   'dampening': 0, 
                   'weight_decay': 0, 
                   'nesterov': False, 
                   'params': [1412966600640, 1412966613064, 1412966613136, 1412966613208, 
                             1412966613280, 1412966613352, 1412966613496, 1412966613568]
                 }]
'''
torch.save(model.state_dict(),"model.path") # 保存参数
model = model() # 代码中创建网络结构
params = torch.load("model.path") # 加载参数
model.load_state_dict(params) # 应用到网络结构中

3、总结

model.state_dict()、model.parameters()、model.named_parameters()这三个方法都可以查看Module的参数信息,用于更新参数,或者用于模型的保存。

到网络结构中

4、引用

Pytorch model中的遍历模型的参数
pytorch中获取模型参数

pytorch中model.parameters()和model.state_dict()使用时的区别 联邦学习模拟实验中涉及模型参数的聚合和广播,需要提取模型参数。这个时候一般有两个选择,model.parameters() 和 model.state.dict()。 表面上看这两者的区别只在于 model.parameters() 方法返回的是一个生成器generator,里面只有模型的参数,而没有对应的网络层名称;而model.state_dict() 返回的则是一个字典 {key:value},key 时网络层名称,value 则是该层的参数。 但我实际做实验的时候发现,分别用这两种方法进行聚合的实验 阅读详情

相关推荐

Pytorch加载保存好的模型发现与实际保存模型的参数不一致

Pytorch加载保存好的模型发现与实际保存的参数不一致发现问题初衷:问题:保存模型并打印参数:加载模型并打印模型参数问题来了解决问题先说结论原因:联想问题本质二级目录三级目录参考博客 发现问题 初衷: 最近跑深度学习代码,数据量比较庞大所以训练速度慢的一,一旦有什么问题训练突然停止了,心态都要炸了,所以这时候使用pytorch保存每轮训练好的模型(可以使用一些保存技巧,保存得到的当前最新的模型checkpoint,倒不至于每轮都保存),即使训练停止还能接着去加载保存好的模型得到当前模型输出结果,节省时间,

weixin_42416791的博客 1万+

Pytorch(六)(模型参数的遍历) —— model.parameters() & model.named_parameters() & model.state_dict()

net = Net() #k,v就分别是w和b for k, v in net.named_parameters(): print(k,v) 效果可见这里 https://blog.csdn.net/hxxjxw/article/details/105667269 model.state_dict()、model.parameters()、model.named_parameters()这三个方法都可以查看Module的参数信息,用于更新参数,或者用于模型的保存。 .....

hxxjxw的博客 3万+

【最佳实践】pytorch模型权重的重置与重新赋值

重置为原来的值: def weight_reset(m): if isinstance(m, nn.Conv2d) or isinstance(m, nn.Linear): m.reset_parameters() model = = nn.Sequential( nn.Conv2d(3, 6, 3, 1, 1), nn.ReLU(), nn.Li...

sailist的记录站 1万+

pytorch中获取模型参数:state_dict和parameters两个方法的差异比较

一、本文的模型案例 代码如下: import torch import torch.nn.functional as F from torch.optim import SGD class MyNet(torch.nn.Module): def __init__(self): super(MyNet, self).__init__() # 第一句话,调用父类的构...

造未来 2万+

Pytorch查看网络可学习参数的秘籍

  Pytorch作为当前风头正劲的深度学习框架,以强大的动态图机制笑傲江湖。Pytorch通过autograd构建了自动微分系统,并且基于autograd构建了nn神经网络模块,封装了卷积、池化、全连接等各种神经网络常见结构。   torch.nn的核心数据结构是Module,它是一个抽象的概念,既可以表示神经网络中的某个层(layer),也可以表示一个包含很多层的神经网络。在实际运用中,我们通...

qq_42079689的博客 1127

测试人必看!正交表与Allpairs工具对比:如何选择最适合你的组合测试方案?

本文深入对比了正交表、PICT与Allpairs三种主流组合测试方案,帮助测试人员根据项目场景做出最佳选择。文章分析了各自的核心原理、优劣势及适用场景,特别强调了在涉及复杂约束时PICT工具的强大功能,并提供了从原理学习到CI/CD集成的实战选型指南。

weixin_29224309的博客 268

pytorch中查看可训练参数

  pytorch中我们有时候可能需要设定某些变量是参与训练的,这时候就需要查看哪些是可训练参数,以确定这些设置是成功的。   pytorch中model.parameters()函数定义如下: def parameters(self): r"""Returns an iterator over module parameters. This is typ...

刘伟的博客 2万+

别再只盯着照片了!手把手教你用Python提取大疆照片里的GPS、姿态和RTK数据

本文详细介绍了如何使用Python提取大疆照片中的GPS、姿态和RTK数据,帮助用户解锁无人机拍摄照片中的隐藏元数据。通过实战代码示例,展示了如何解析EXIF格式的定位、姿态和RTK状态信息,并实现批量处理与数据分析,适用于测绘、农业巡检等专业领域。

weixin_30790841的博客 156

深入解析PyTorch中model.modules()与model.children()的层级遍历差异与应用场景

本文深入解析PyTorch中model.modules()与model.children()的核心差异与应用场景。model.children()仅进行浅层遍历,返回模型的直接子模块,适用于模块化操作;而model.modules()进行深度递归遍历,返回模型自身及其所有子模块,适用于精细化的参数操作与全局分析。正确选择遍历方法是高效进行模型修改、初始化和特征提取的关键。

weixin_29046611的博客 191

手把手教你用Docker快速部署ZLMediaKit流媒体服务器(含WebRTC配置)

本文详细介绍了如何使用Docker快速部署ZLMediaKit流媒体服务器,并配置WebRTC功能。通过容器化部署,实现环境一致性、资源隔离和快速扩展,同时提供WebRTC专项配置、多协议推拉流实战测试及生产环境优化建议,帮助开发者高效搭建企业级流媒体平台。

agile9scrum的博客 203

ANSYS 有限元分析 接触分析

目 录一、前沿二、接触单元类三、接触单元关键选项3.1 CONTA174 KeyOption3.2 TARGE170 KeyOption四、接触分析标准步骤4.1 定义实常数4.2 定义接触和目标单元4.3 创建接触和目标单元五、接触分析实例5.1 MPC5.2 标准接触六、尾声七、参考文献 阿阳的 ANSYS 使用指南,本文仅用于个人学习,除此之外,无其他任何用途。 ANSYS 有限元分析 概述 ANSYS 有限元分析 坐标系/工作平面 ANSYS 有限元分析 几何建模 ANSY

Hulunbuir 4万+

PyTorch中model.state_dict(),model.modules(),model.children(),model.named_children()等含义

PyTorch 中 model 的各种方法总结:首先定义网络模型 Net: 网络 Net 本身是一个 nn.Module 的子类,包含了 backbone 和 classifier 两个由 Sequential 容器组成的 nn.Module 子类,backbone 和 classifier 各自又包含一些网络层,这些网络层也都属于 nn.Module 子类,所以从外到内共有三级:model 各种方法的返回值: 除了 model.state_dict() 返回值为一个有序字典,其他方法的返回值都是一个生成器

学习 & 分享 ~ 7153

Comsol超声空化气泡仿真:从基础理论到工业应用实践

本文详细介绍了Comsol超声空化气泡仿真的基础理论及工业应用实践。通过解析超声空化现象、Comsol模型搭建流程及求解器优化技巧,帮助工程师掌握气泡仿真技术,提升超声波清洗和乳液制备等工业应用的效率与质量。

weixin_27966471的博客 253

PyTorch中model.modules(), model.named_modules(), model.children(), model.named_children(), model.para

本文通过一个例子实验来观察并讲解PyTorch中***model.modules(), model.named_modules(), model.children(), model.named_children(), model.parameters(), model.named_parameters(), model.state_dict()***这些model实例方法的返回值。例子如下: import torch import torch.nn as nn class Net(nn.Module)

qq_39641349的博客 4512

【文献阅读:信道估计】Deep Residual Learning Meets OFDM Channel Estimation

基于深度学习的信道估计技术

weixin_43178683的博客 1756

移动端HDR

移动HDR是近年来移动设备最大的技术进步之一。自2017年起,它就开始出现在旗舰手机上,包括苹果(Apple)和三星(Samsung)在内的大多数制造商都加入了这一行列。这一趋势在过去几年里席卷了整个电视行业,但在最近几年才真正深入人心。而且,最近,将更多的HDR内容放到移动设备上的趋势已经加快。对于这种新兴技术来说,它还处于相对早期的阶段,但它也非常有趣,值得关注。 HDR是什么? HDR是...

ISP行业的忠实粉丝 1341

PyTorch model 返回函数总结——model.state_dict(),model.modules(),model.children(),model.parameters()

首先定义网络模型。

Chaoy6565的博客 6954

【网络安全】零基础入门网络安全劝退指北

作为从16年接触网络安全的小白,谈谈零基础如何入门网络安全,有不对的地方,请多多指教。 这些年最后悔的事情莫过于没有把自己学习的东西积累下来形成一个知识体系。 后续我也会陆续的整理网络安全的相关学习资料及文章,与大家一起探讨学习。 如何入门 简单了解网络安全 网络安全就是指的确保网络系统中的数据不被别人破坏,而网安工程师就是涉及程序来维护网络安全。 网安方向有很多职位,比如安全产品工程师,安全分析师,数据恢复工程师,网络架构工程师,安全编程工程师,以及网络集成工程师等。 工作内容主要包括: 安全评测,风

互联网老辛 4592

model.modules(),model.parameters(),model.state_dict()

即将每个层的权重和偏差等参数保存到一个 Python 字典中,字典的 key 为参数的名称,value 为该参数的值,可以将这个字典用于后面的优化器、断点续训或者模型的保存和加载。是一个PyTorch中的方法,它会返回一个包含模型所有可训练参数的迭代器,这些参数可以被用于优化器的更新或者保存与加载模型。具体来说,model.modules()返回的是一个生成器(generator),其中包括了整个模型的所有层级,包括父层级和子层级,但是不包括网络中的连接层和节点。

weixin_43960370的博客 823

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

PyTorch中的modules(), children(), named_children(), parameters(), named_parameters(),state_dict()

本文通过一个例子实验来观察并讲解PyTorch中model.modules(), model.named_modules(), model.children(), model.named_children(), model.parameters(), model.named_parameters(), model.state_dict()这些model实例方法的返回值。例子如下: import torch import torch.nn as nn class Net(nn.Module):

zhuhuigege的博客 601

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

pytorch 查看模型结构 网络参数

用法比较简单,不过容易忘,记录一下。假设已定义好模型,名为model。 查看模型结构: >>> print(model) 查看网络参数: for name, parameters in model.named_parameters(): print(name, ':', parameters.size()) 来个具体的简单的例子: import torch.nn as nn class Net(nn.Module): def __init__(self)

anshiquanshu的专栏 4089

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

pytorch-查看网络模型

1、print(model) import torch class MyNet(torch.nn.Module): def __init__(self): # 必须调用父类的构造函数,因为想要使用父类的方法,这也是继承Module的目的 super(MyNet, self).__init__() self.conv1 = torch.nn.Conv2d(3, 32, 3, 1, 1) self.relu1 = torch.nn.

DongxueB的博客 1497

torch 模型中相关参数param及child修改测试详解

以我们上述的例子来看,它的输出就是整个Sequential层。如果我们定义模型的时候有两个Sequential,就会分别输出两个。所以一般的话使用model.children()会建立一个函数递归调用。这个就是输出模型的名字和参数,很常见了。name的话就是每个层的名字,参数就很多了,大家可以自己试一下。与1差不多,只不过仅有param没有了name。中的children是一个道理。该方法会遍历模型的子层,就跟。其他用到的在更新吧。

weixin_43013480的博客 388

pytorch加载预训练模型

1. 查看所有module model.modules()以深度优先遍历的方式,存储了net的所有模块,包括net itself,net's children, children of net's children。即model.children()只包括网络模块的第一代儿子模块,而model.modules()包含网络模块的自己本身和所有后代模块。 model.modules()和model.named_modules()内部采用yield关键字,得到生成器。当外部迭代调用net.named_module

Abraham Ben 1297

第一模块图像识别常用分类模块pytorch model.named_parameters() ,model.parameters() ,model.state_dict().items()

pytorch model.named_parameters() ,model.parameters() ,model.state_dict().items() 1、model.named_parameters(),迭代打印model.named_parameters()将会打印每一次迭代元素的名字和param。 for name, param in model.named_parameters(): print(name,param.requires_grad) param.requires_grad

weixin_42394925的博客 581
上一篇: Java基础-----------数组
下一篇: Python except 关键字
Code_demon
博客等级 码龄8年 2粉丝 22原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值