目录
🧱 一、卷积层参数量计算公式
⚙️ 二、卷积层计算复杂度(FLOPs)
🧪 三、举个例子
四、补充知识
1.参数量(Parameters)计算公式是怎么来的?
2.FLOPs(浮点计算量)公式是怎么来的
什么是 FLOPs?
先拆解一次卷积输出一个像素所需的操作
整层输出需要多少次这样的操作?
最后合在一起的 FLOPs 总数:
卷积神经网络(CNN)中,每个 卷积层的参数量 和 计算复杂度(FLOPs) 是怎么计算的?
🧱 一、卷积层参数量计算公式
设卷积层的参数如下:
名称 | 含义 |
---|---|
| 输入通道数 |
| 输出通道数(即卷积核个数) |
| 卷积核尺寸(假设为正方形) |
| 是否使用偏置(每个输出通道一个) |
✅ 参数量(Parameters):
⚙️ 二、卷积层计算复杂度(FLOPs)
FLOPs = 乘加操作总数(每次卷积一个输出像素时乘加一次)
✅ FLOPs(浮点计算量)公式:
乘法 + 加法 各算一次(所以乘以 2)
🧪 三、举个例子
例子:输入特征图大小为 64✖️64,3 个通道
卷积层设置如下:
• 卷积核大小:3✖️3
• 输出通道数(输出特征图的深度):64
• 步长 stride = 1,padding 保持尺寸不变(输出还是 64x64)
✅ 参数量计算:
✅ FLOPs 计算:
输出大小为 64✖️64,每个输出像素:
📌 总结对照表
项目 | 公式 | 说明 |
---|---|---|
参数量 | | 卷积核权重 + 偏置 |
FLOPs | | 每个像素点的乘加计算 |
四、补充知识
1.参数量(Parameters)计算公式是怎么来的?
首先明确一点,参数是什么?
参数(Parameters):是网络要学的、可训练的权重,比如卷积核的权重。
这也就是为什么输入图像的的 H 和 W 不能算入参数量,因为它们是输入数据,是送进网络的图像/特征图,它不参与训练。
那这个公式是怎么来的?
由于输入图像可能是(H, W, ),卷积核大小是k✖️k,则对于每个输入的 channel,
每个卷积核会对 每个输入通道 都有一组独立的权重,因此每个输出通道需要的参数量为:
,而由于输出维度是
(即有
个卷积核),所以还需要相乘,得到
。
若包含 bias(偏置项),则每个输出通道会额外加 1 个偏置,总参数量为:
。
2.FLOPs(浮点计算量)公式是怎么来的
什么是 FLOPs?
FLOPs = Floating Point Operations(浮点运算次数),指的是模型运行时需要执行多少次 加法+乘法,一般用于衡量模型的 计算复杂度/推理成本。
先拆解一次卷积输出一个像素所需的操作
卷积操作 = 每个位置做一堆乘加:
假设输入尺寸是 ,卷积核大小为
一个输出像素点 的计算是:
乘法数量:每个输入通道都有一个 卷积核 → 需要
次乘法
加法数量:这些乘完后相加,也需要 次加法
✅ 所以总的浮点运算量约为:
我们默认 一次乘法 + 一次加法 = 2 FLOPs(这是约定俗成的标准)。
整层输出需要多少次这样的操作?
我们要在整张输出特征图上的每一个位置,都做上述乘加操作:
每个输出通道有 个像素点
总共有 个通道
所以一共的输出像素点数是:
最后合在一起的 FLOPs 总数:
每个输出位置 FLOPs:
乘以所有输出位置数量:
所以最终的 FLOPs 是:
🎯 举个例子更直观:
比如有个卷积层:
• 输入通道:3
• 输出通道:64
• 卷积核大小:3 ✖️ 3
• 输出特征图大小:224 ✖️ 224
代入上面公式: