【深度学习】评估模型复杂度:GFLOPs与Params详解

评估模型复杂度:GFLOPs与Params详解

在深度学习模型设计与优化过程中,GFLOPsParams是论文中两个重要的评估指标,它们分别衡量模型的计算复杂度和参数量。本文将详细介绍这两个概念及其在实践中的应用。

1. Params:模型参数量

1.1 基本概念

ParamsParameters)指的是神经网络模型中所有可训练参数的总数量。这些参数包括:

  • 卷积层的权重和偏置
  • 全连接层的权重和偏置
  • 归一化层的可学习参数(如BatchNorm的 γ γ γ β β β

1.2 计算方法

不同层的参数量计算方式:

  1. 全连接层输入维度 × 输出维度 + 输出维度(偏置)
  2. 卷积层(kernel_height × kernel_width × in_channels) × out_channels + out_channels(偏置)
  3. BatchNorm层2 × channels γ γ γ β β β各一个)

1.3 代码示例(PyTorch)

import torch
import torch.nn as nndef count_params(model):return sum(p.numel() for p in model.parameters() if p.requires_grad)# 示例模型
model = nn.Sequential(nn.Conv2d(3, 16, kernel_size=3),nn.ReLU(),nn.Flatten(),nn.Linear(16*26*26, 10)
)print(f"模型参数量: {count_params(model):,}")

2. FLOPs与GFLOPs:浮点运算次数

2.1 基本概念

  • FLOPs(Floating Point Operations):浮点运算次数
  • GFLOPs:10^9 FLOPs(十亿次(G,吉, 1 G = 1 0 9 1G = 10^9 1G=109)浮点运算)

FLOPs衡量的是模型执行一次前向传播所需的浮点运算总量,反映了模型的计算复杂度。

2.2 计算方法

常见层的FLOPs计算:

  1. 全连接层(2 × in_features - 1) × out_features
  2. 卷积层2 × H_out × W_out × in_channels × out_channels × kernel_height × kernel_width
  3. 激活函数:通常忽略或按元素计算

2.3 代码示例

def count_flops(model, input_size=(1, 3, 32, 32)):from thop import profileinput = torch.randn(input_size)flops, params = profile(model, inputs=(input,))return flopsprint(f"模型FLOPs: {count_flops(model)/1e9:.2f} GFLOPs")

3. 两者的关系与区别

特性ParamsFLOPs/GFLOPs
衡量对象模型容量/存储需求计算复杂度/运行速度
单位数量(通常百万,M)浮点运算次数(十亿,G)
影响因素网络宽度/深度输入分辨率/网络结构
优化方向参数量压缩计算加速

4. 实际应用中的考量

4.1 模型选择与设计

  • 资源受限设备:需要同时考虑低Params和低FLOPs
  • 服务器部署:可能更关注FLOPs以减少计算时间
  • 边缘设备:可能更关注Params以减少内存占用

4.2 优化技巧

减少Params的方法

  • 使用深度可分离卷积
  • 模型剪枝
  • 低秩分解
  • 知识蒸馏

减少FLOPs的方法

  • 降低输入分辨率
  • 使用更高效的网络结构(如MobileNet)
  • 通道剪枝
  • 使用轻量级操作(如池化代替卷积)

5. 常见模型的对比

下表展示了一些经典模型的参数量和计算量:

模型Params (M)FLOPs (G)输入尺寸
ResNet-1811.71.82224×224
MobileNetV23.50.32224×224
EfficientNet-B05.30.39224×224
VGG-1613815.5224×224

6. 总结

理解GFLOPs和Params对于深度学习从业者至关重要:

  1. Params帮助评估模型大小和内存需求
  2. GFLOPs帮助评估计算成本和推理速度
  3. 在实际应用中需要根据部署场景平衡两者
  4. 现代高效网络设计追求在两者之间取得最佳平衡

通过合理使用这两个指标,开发者可以更好地设计、选择和优化深度学习模型,使其更适合特定的应用场景和部署环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go语言->练习6例

1.go语言的接口实现 接口(interface)是一种类型,它定义了一组方法的集合。任何类型只要实现了接口中定义的所有方法,就被认为实现了该接口。 在Go语言中,使用接口的最佳实践可以提高代码的可读性、可维护性和灵活性。…

Drivestduio 代码笔记与理解

Rigid Node: 表示 car或者trucks Deformable Node : 表示一些 分布之外的 non-rigid 的运动物体, 比如远处的行人等和Cyclist。 在 load_objects 会读取每一个 dynamic objects 的 bounding box’的信息,具体如下: frame_instances 记录了每…

《算法笔记》10.5小节——图算法专题->最小生成树 问题 E: Jungle Roads

题目描述 The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was spent on extra roads between villages some years ago. But the jungle overtakes roads relentlessly, so the large road network is too expensive to mai…

【音视频】SDL简介

官网:官网 文档:文档 SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供数种控制图像、声音、输出入的函数,让开发者只 要用相同或是相似的代码就可以开发出跨多…

SpringBoot + SSE 实时异步流式推送

前言 在当今数字化时代,实时数据处理对于企业的决策和运营至关重要。许多业务场景需要及时响应数据库中的数据变化,例如电商平台实时更新库存、金融系统实时监控交易数据等。 本文将详细介绍如何通过Debezium捕获数据库变更事件,并利用Serv…

ADS1299模拟前端(AFE)代替芯片——LHE7909

在现代医疗科技的飞速发展中,精确的生物电势测量设备变得越来越重要。领慧立芯推出的LHE7909,是一款专为心电图(ECG)和其他生物电势测量设计的低噪声24位模数转换器(ADC),为医疗设备制造商提供了…

如何实现Redis和Mysql中数据双写一致性

一、引言 今天我们来聊聊一个在分布式系统中非常常见但又十分棘手的问题——Redis与MySQL之间的双写一致性。我们在项目中多多少少都遇到过类似的困扰,缓存是用Redis,数据库是用MySQL,但如何确保两者之间的数据一致性呢?接下来我…

面试篇 - Transformer前馈神经网络(FFN)使用什么激活函数?

1. FFN结构分解 原始Transformer的FFN层 FFN(x) max(0, xW₁ b₁)W₂ b₂ # 原始论文公式 输入:自注意力层的输出 x(维度 d_model512) 扩展层:xW₁ b₁(扩展为 d_ff2048) 激活函数:Re…

基于Python Flask的深度学习电影评论情感分析可视化系统(2.0升级版,附源码)

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

前端vue2修改echarts字体为思源黑体-避免侵权-可以更换为任意字体统一管理

1.下载字体 npm install fontsource/noto-sans-sc 不知道为什么我从github上面下载的不好使,所以就用了npm的 2.引用字体 import fontsource/noto-sans-sc; 在入口文件-main.js中引用 3.设置echats模板样式 import * as echarts from echarts; // 在import的后…

51c自动驾驶~合集37

我自己的原文哦~ https://blog.51cto.com/whaosoft/13878933 #DETR->DETR3D->Sparse4D 走向长时序稀疏3D目标检测 一、DETR 图1 DETR架构 DETR是第一篇将Transformer应用到目标检测方向的算法。DETR是一个经典的Encoder-Decoder结构的算法,它的骨干网…

【MongoDB篇】MongoDB的集合操作!

目录 引言第一节:集合的“诞生”——自动出现还是手动打造?🤔第二节:集合的“查阅”——看看这个数据库里有哪些柜子?📂👀第三节:集合的“重命名”——给文件柜换个名字!…

Goland终端PowerShell命令失效

Goland终端Terminal的PowerShell不能使用,明明windows上升级了PowerShell 7设置了配置文件,但是只能在windows终端下使用,goland终端下直接失效报错,安装升级PowerShell请看Windows11终端升级PowerShell7 - HashFlag - 博客园 问…

简单分析自动驾驶发展现状与挑战

一、技术进展与市场渗透 技术分级与渗透率 当前量产乘用车的自动驾驶等级以L2为主(渗透率约51%),L3级处于初步落地阶段(渗透率约20%),而L4级仍处于测试和示范运营阶段(渗透率约11%)2…

【C++类和数据抽象】消息处理示例(1):从设计模式到实战应用

目录 一、数据抽象概述 二、消息处理的核心概念 2.1 什么是消息处理? 2.2 消息处理的核心目标 三、基于设计模式的消息处理实现 3.1 观察者模式(Observer Pattern) 3.2 命令模式(Command Pattern) 四、实战场景…

【统计方法】交叉验证:Resampling, nested 交叉验证等策略 【含R语言】

Resampling (重采样方法) 重采样方法是从训练数据中反复抽取样本,并在每个(重新)样本上重新调整模型,以获得关于拟合模型的附加信息的技术。 两种主要的重采样方法 Cross-Validation (CV) 交叉验证 : 用于估计测试误…

常见的 CSS 知识点整理

1. 盒模型(Box Model)是什么?标准盒模型和 IE 盒模型的区别? 答案: CSS 盒模型将元素视为一个盒子,由内容(content)、内边距(padding)、边框(bor…

Educational Codeforces Round 178 div2(题解ABCDE)

A. Three Decks #1.由于最后三个数会相等&#xff0c;提前算出来和&#xff0c;%3判断&#xff0c;再判前两个数是否大于 #include<iostream> #include<vector> #include<stdio.h> #include<map> #include<string> #include<algorithm> #…

如何创建一个导入模板?全流程图文解析

先去找到系统内可以上传东西的按钮 把你的模板上传上去,找到对应的fileName 图里的文字写错了,是复制粘贴"filePath"到URL才能下载

通信原理第七版与第六版区别附pdf

介绍 我用夸克网盘分享了「通信原理 第7版》樊昌信」&#xff0c;链接&#xff1a;https://pan.quark.cn/s/be7c5af4cdce 《通信原理&#xff08;第7版&#xff09;》是在第6版的基础上&#xff0c;为了适应当前通信技术发展和教学需求&#xff0c;并吸取了数十所院校教师的反…