栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

网络模型的加载以及参数量的计算

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

网络模型的加载以及参数量的计算

pytorch模型载入与参数量计算
  • 1、学习内容:
  • 2、必做题:
    • (1)代码和运算结果截屏
    • (2)ONNX文件大小
  • 3、思考题
    • (1)规律
    • (2)onnx残差结构截图
    • (3)不同点的比较
    • (4)模型加载中strict的参数意义:

1、学习内容:

1.如何载入、加载模型、
2.计算模型的参数量

2、必做题: (1)代码和运算结果截屏

代码:

为了避免代码重复,没有贴上输入尺寸为448x448的代码,修改位置见注释

import torchvision.models as models
import torch
from thop import profile

model = models.resnet18()#加载模型
pretrained_state_dict = torch.load('./models/weights/resnet18-5c106cde.pth')#加载权重
model.load_state_dict(pretrained_state_dict,strict=True)#载入权重
model_state_dict = model.state_dict()
input = torch.rand([1,3,224,224]).type(torch.float32)  # 将长宽修改成448,448
flops,params = profile(model=model,inputs=(input,))
print('model:{:.2f} GFLOPS and {:.2f}M parameters'.format(flops/1e9,params/1e6))#模型参数量

结果:

224 x 224 :
448 x 448:

(2)ONNX文件大小

原resnet18权重文件大小为44.6M,当转为onnx时为44.5M,大小变化不大。但在yolov5中,将训练好的权重文件转为onnx时,大小减少将近一半,这是有点疑惑的。

3、思考题 (1)规律

当把输入尺寸为(1,3,224,224)改为(1,3,448,448)时,模型的参数量成倍增加,增加将近4倍,即输入尺寸的倍数(2x2);

(2)onnx残差结构截图

onnx中的一段残差结构

(3)不同点的比较

model.state_dict(), model.named_parameters()和 model.parameters()

  1. 这三者其中 model.state_dict()是一个字典对象,将每一层与它的对应参数建立映射关系。只有那些参 数可以训练的layer才会被保存到模型的state_dict中,如卷积层,线性层等等,像池化层、BN层这些本身没有参数的层是没有在这个字典中的,更多是在模型保存时使用。
  2. model.parameters()方法返回的是一个生成器generator,每一个元素是从开头到结尾的参数,parameters没有对应的key名称,是一个由纯参数组成的generator,而state_dict是一个字典,包含了一个key。
  3. model.named_parameters,而model.parameters正是通过named_parameters来实现的。
(4)模型加载中strict的参数意义:

当模型中有权重文件不存在参数时,此时字典的key-value对应不上,会报错。将strict设为Flase时,就会有模型中存在的所有参数。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/329240.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号