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

如何计算卷积的复杂度、卷积层的参数量

目录

🧱 一、卷积层参数量计算公式

⚙️ 二、卷积层计算复杂度(FLOPs)

🧪 三、举个例子

四、补充知识

1.参数量(Parameters)计算公式是怎么来的?

2.FLOPs(浮点计算量)公式是怎么来的

什么是 FLOPs?

先拆解一次卷积输出一个像素所需的操作

整层输出需要多少次这样的操作?

最后合在一起的 FLOPs 总数:


 

卷积神经网络(CNN)中,每个 卷积层的参数量计算复杂度(FLOPs) 是怎么计算的?


🧱 一、卷积层参数量计算公式

设卷积层的参数如下:

名称

含义

C_{\text{in}}

输入通道数

C_{\text{out}}

输出通道数(即卷积核个数)

K \times K

卷积核尺寸(假设为正方形)

\text{bias}

是否使用偏置(每个输出通道一个)

✅ 参数量(Parameters):


⚙️ 二、卷积层计算复杂度(FLOPs)

FLOPs = 乘加操作总数(每次卷积一个输出像素时乘加一次)

✅ FLOPs(浮点计算量)公式:

\text{FLOPs} = H_{\text{out}} \times W_{\text{out}} \times C_{\text{out}} \times C_{\text{in}} \times K \times K \times 2

乘法 + 加法 各算一次(所以乘以 2)

🧪 三、举个例子

例子:输入特征图大小为 64✖️64,3 个通道

卷积层设置如下:

• 卷积核大小:3✖️3

• 输出通道数(输出特征图的深度):64

• 步长 stride = 1,padding 保持尺寸不变(输出还是 64x64)


✅ 参数量计算:


✅ FLOPs 计算:

输出大小为 64✖️64,每个输出像素:

\text{FLOPs} = 64 \times 64 \times 64 \times 3 \times 3 \times 3 \times 2 = 4.7 \times 10^6 \ (\approx 4.7 MFLOPs)


📌 总结对照表

项目

公式

说明

参数量

C_{\text{in}} \cdot K^2 \cdot C_{\text{out}} \ (+ C_{\text{out}})

卷积核权重 + 偏置

FLOPs

H \cdot W \cdot C_{\text{out}} \cdot C_{\text{in}} \cdot K^2 \cdot 2

每个像素点的乘加计算

四、补充知识

1.参数量(Parameters)计算公式是怎么来的?

首先明确一点,参数是什么?

参数(Parameters):是网络要学的、可训练的权重,比如卷积核的权重。

这也就是为什么输入图像的的 H 和 W 不能算入参数量,因为它们是输入数据,是送进网络的图像/特征图,它不参与训练

那这个公式是怎么来的?

由于输入图像可能是(H, W, C_{in}),卷积核大小是k✖️k,则对于每个输入的 channel,

每个卷积核会对 每个输入通道 都有一组独立的权重,因此每个输出通道需要的参数量为:

C_{\text{in}} \times k \times k,而由于输出维度是 C_{out}(即有C_{out}个卷积核),所以还需要相乘,得到C_{in} \times k \times k \times C_{out}

若包含 bias(偏置项),则每个输出通道会额外加 1 个偏置,总参数量为:

C_{\text{in}} \times k \times k \times C_{\text{out}} + C_{\text{out}}

2.FLOPs(浮点计算量)公式是怎么来的

\text{FLOPs} = H_{\text{out}} \times W_{\text{out}} \times C_{\text{out}} \times C_{\text{in}} \times K \times K \times 2

什么是 FLOPs?

FLOPs = Floating Point Operations(浮点运算次数),指的是模型运行时需要执行多少次 加法+乘法,一般用于衡量模型的 计算复杂度/推理成本。

先拆解一次卷积输出一个像素所需的操作

卷积操作 = 每个位置做一堆乘加:

假设输入尺寸是 C_{\text{in}},卷积核大小为K \times K

一个输出像素点 的计算是:

乘法数量:每个输入通道都有一个 K \times K卷积核 → 需要 C_{\text{in}} \times K \times K 次乘法

加法数量:这些乘完后相加,也需要 C_{\text{in}} \times K \times K - 1次加法

✅ 所以总的浮点运算量约为:

我们默认 一次乘法 + 一次加法 = 2 FLOPs(这是约定俗成的标准)。

整层输出需要多少次这样的操作?

我们要在整张输出特征图上的每一个位置,都做上述乘加操作:

每个输出通道有 H_{\text{out}} \times W_{\text{out}} 个像素点

总共有 C_{\text{out}} 个通道

所以一共的输出像素点数是:

H_{\text{out}} \times W_{\text{out}} \times C_{\text{out}}

最后合在一起的 FLOPs 总数:

每个输出位置 FLOPs:

C_{\text{in}} \times K \times K \times 2

乘以所有输出位置数量:

H_{\text{out}} \times W_{\text{out}} \times C_{\text{out}}

所以最终的 FLOPs 是:

\boxed{ \text{FLOPs} = H_{\text{out}} \times W_{\text{out}} \times C_{\text{out}} \times C_{\text{in}} \times K \times K \times 2 }


🎯 举个例子更直观:

比如有个卷积层:

• 输入通道:3

• 输出通道:64

• 卷积核大小:3 ✖️ 3

• 输出特征图大小:224 ✖️ 224

代入上面公式:

224 \times 224 \times 64 \times 3 \times 3 \times 3 \times 2 = \boxed{173,408,256 \text{ FLOPs}}

相关文章:

  • 基于springboot+vue的漫画天堂网
  • frp内网穿透零基础详细教程
  • 03.31-04.06 论文速递 聚焦具身智能、复杂场景渲染、电影级对话生成等五大前沿领域
  • 如何解决uniapp打包安卓只出现功能栏而无数据的问题
  • 优雅实现级联选择器:CascadeSelect 类设计与实现
  • 第4课:列表渲染与条件渲染
  • Diffusion Policy Visuomotor Policy Learning via Action Diffusion官方项目解读(二)(2)
  • Java 集合框架与 Stream 流深入剖析(重点详细讲解)
  • langchain实现基于语义分块的文档处理技术semantic-chunker
  • 小飞电视 2.7.0 | 高清秒播无卡顿的电视直播软件
  • 大模型部署实践第一天——基于Colab体验完整部署流程
  • C语言中单向链表:创建节点与插入新节点
  • lerobot[部署,元数据集,加载数据集]
  • Java学习总结-线程同步
  • keil5忽略警告
  • S32K144入门笔记(二十五):FlexCAN初始化序列
  • LeetCode 1169 查询无效交易
  • 【嵌入式系统设计师】知识点:第3章 嵌入式硬件设计
  • HCIP【路由策略技术(详解)】
  • 1️⃣ 智能体基础入门教学(2025年全新版本)
  • 网站建设一般都有什么项目/免费seo优化
  • 淘宝做网站建设靠谱吗/产品推广活动策划方案
  • 建设银行网站钓鱼/网络营销成功的案例分析
  • 合肥集团网站建设/黄冈网站建设收费
  • 江苏盐城网站开发/深圳网络推广外包
  • 物联网出来做什么工作/阿里巴巴关键词排名优化