欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 如何计算卷积的复杂度、卷积层的参数量

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

2025/4/9 10:13:48 来源:https://blog.csdn.net/ncnfjdjjd/article/details/147031707  浏览:    关键词:如何计算卷积的复杂度、卷积层的参数量

目录

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

⚙️ 二、卷积层计算复杂度(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}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词