当前位置: 首页 > news >正文

在深度学习中,如何统计模型的 ​​FLOPs(浮点运算次数)​​ 和 ​​参数量(Params)

在深度学习中,统计模型的FLOPs(浮点运算次数)和参数量(Params)是评估模型复杂度和计算资源需求的重要步骤。


在这里插入图片描述


一、参数量(Params)计算

参数量指模型中所有可训练参数的总和,其计算与网络结构直接相关:

  1. 卷积层
    • 公式:Params = out_channels × (in_channels × kernel_size²) + out_channels(含偏置项)
    • 示例:输入通道为3,输出通道为64,卷积核3×3,则参数量为64×(3×3²)+64=1,792。

  2. 批归一化层(BatchNorm)
    • 每通道包含可学习的γ和β参数,计算为:Params = 2 × out_channels

  3. 全连接层
    • 公式:Params = in_features × out_features + out_features(含偏置项)。

  4. 激活层(如ReLU)
    • 无参数,参数量为0。


二、FLOPs(浮点运算次数)计算

FLOPs反映模型的计算复杂度,通常以乘加操作(MACs)为基础,1 MAC = 2 FLOPs:

  1. 卷积层
    • 公式:
    FLOPs = batch_size × in_channels × kernel_size² × out_channels × H_out × W_out × 2
    • 示例:输入尺寸为224×224,卷积核3×3,输出通道64,则单样本FLOPs为3×3²×64×224×224×2≈5.2×10⁹。

  2. 全连接层
    • 含偏置时:FLOPs = batch_size × in_features × out_features × 2

  3. 批归一化层
    • 推理阶段归一化操作约为每通道2 × H × W次运算。


三、常用工具库

1. 使用thop(推荐)
import torch
from thop import profile

model = MyModel()  # 自定义模型
input = torch.randn(1, 3, 224, 224)  # 输入尺寸
flops, params = profile(model, inputs=(input,))
print(f"FLOPs: {flops/1e9:.2f} G, Params: {params/1e6:.2f} M")
2. 使用ptflops(支持逐层分析)
from ptflops import get_model_complexity_info

flops, params = get_model_complexity_info(model, (3, 224, 224), 
                                         as_strings=True, 
                                         print_per_layer_stat=True)
3. 使用torchstat(兼容旧版本PyTorch)
from torchstat import stat
stat(model, (3, 224, 224))

四、注意事项

  1. FLOPs与FLOPS的区别
    • FLOPs(复数)指总浮点运算次数,用于模型复杂度;FLOPS(全大写)指每秒浮点运算次数,衡量硬件性能。

  2. 工具计算的局限性
    • 某些自定义层(如注意力机制)可能未被统计,需手动补充。

  3. 实际推理速度的影响因素
    • FLOPs仅反映理论计算量,实际速度还受内存带宽、并行优化等因素影响。


相关文章:

  • Tiktok 关键字 视频及评论信息爬虫(1) [2025.04.07]
  • 从GPU加速到深度学习革命 —— AlexNet论文概述
  • 面试题vue
  • Compose Multiplatform+Kotlin Multiplatfrom 第五弹跨平台 截图
  • 深度学习与神经网络 | 邱锡鹏 | 第四章学习笔记 神经网络
  • centos操作系统如何更换yum镜像源
  • git pull 和 git fetch
  • ffmpeg基础知识入门
  • 力扣Hot100题,刷题
  • 红黑树(Red-Black Tree)核心知识点与面试高频问题
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷十·混元大罗(91)混元无极破 NP - 旅行商问题(动态规划 + 状态压缩)
  • 遇到无法连接香港服务器可能是什么原因导致的呢
  • 安宝特应用 | 工业AR技术赋能高端制造领域验收流程数字化转型
  • #在docker中启动mysql之类的容器时,没有挂载的数据...在后期怎么把数据导出外部
  • 浅谈filebeat实现日志采集
  • HTML5 新元素:革新网页开发体验
  • 人工智能-深度学习导学-01
  • Selenium自动化:玩转浏览器,搞定动态页面爬取
  • JavaScript基础-window.localStorage
  • odo18实施——销售-仓库-采购-制造-制造外包-整个流程自动化单据功能的演示教程
  • 浙江理工大学传播系原系主任刘曦逝世,年仅44岁
  • 价格周报|本周猪价继续下探,机构预计今年猪价中枢有支撑
  • 公示资费套餐、规范营销行为,今年信息通信行业将办好这十件实事
  • 高瓴、景林旗下公司美股持仓揭晓:双双增持中概股
  • 国家统计局:2024年城镇单位就业人员工资平稳增长
  • 齐白石精品在波士顿展出,“白石画屋”呈现水墨挥洒