卷积神经网络复杂度分析(时间复杂度,空间复杂度)

本文探讨了卷积神经网络的时间与空间复杂度,详细分析了它们如何影响模型的训练时间和参数数量,并讨论了模型裁剪的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:https://blog.youkuaiyun.com/laolu1573/article/details/79196160

复杂度对模型的影响

  • 时间复杂度决定了模型的训练/预测时间。如果复杂度过高,会导致模型训练和预测耗费大量时间,既无法快速的验证想法和改善模型,也无法做到快速的预测。
  • 空间复杂度决定了模型的参数数量。由于维度灾难的限制,模型的参数越多,训练模型所需的数据量就越大,而现实生活中的数据集通常不会太大,这会导致模型的训练更容易过拟合。

时间复杂度

时间复杂度即模型的运算次数。

单个卷积层的时间复杂度:Time~O(M^2 * K^2 * Cin * Cout)

注1:为了简化表达式中的变量个数,这里统一假设输入和卷积核的形状都是正方形。 

注2:严格来讲每层应该还包含1个Bias参数,这里为了简洁就省略了。

M:输出特征图(Feature Map)的尺寸。
K:卷积核(Kernel)的尺寸。
Cin:输入通道数。
Cout:输出通道数。


输出特征图尺寸又由输入尺寸X、卷积核尺寸K、Padding、 Stride 这四个参数所决定,表示如下: 

M=(X - K + 2*Padding) / Stride + 1

空间复杂度

空间复杂度即模型的参数数量,体现为模型本身的提及。

Space~O(K^2 * Cin * Cout) 

-空间复杂度只与卷积核的尺寸K、通道数C相关。而与输入图片尺寸无关。

-当我们需要裁剪模型时,由于卷积核的尺寸通常已经很小,而网络的深度又与模型的能力紧密相关,不宜过多削减,因此模型裁剪通常最先下手的地方就是通道数。

### 卷积运算的单点计算复杂度分析卷积神经网络(CNN)中,卷积运算是核心组成部分之一。对于给定的一个卷积核\(k \times k\)以及输入特征图上的某一点\((i, j)\),该位置处的卷积操作涉及将卷积核与中心位于此点的相应大小的感受野内的像素值相乘并求和。 具体来说,如果考虑的是二维空间下的标准卷积,则针对每一个输出单元(即每个感受野对应的位置),需要执行的操作数量等于卷积核内参数的数量加上一次偏置项加法。因此,当不计入激活函数的影响时,对于一个尺寸为\(k \times k\)的卷积核而言,在单一输出点上所需的浮点运算次数(FLOPs)大约为: \[ FLOPs_{single\_point} = (w_k * h_k * c_{in}) + 1 \] 这里, - \(w_k\) 和 \(h_k\) 分别代表卷积核宽度和高度; - \(c_{in}\) 表示输入通道数; - 加号后面的“1”指的是应用偏置所需的一次额外加法操作[^2]。 值得注意的是,上述公式仅适用于理想情况下的简单线性变换;实际应用场景可能会因为引入非线性的激活函数而增加更多的计算开销。此外,现代框架通常会对这些基本算子做优化实现,从而可能改变具体的性能表现[^3]。 ```python def calculate_flops_single_point(kernel_width, kernel_height, input_channels): """ 计算单个卷积点的FLOPS 参数: kernel_width (int): 卷积核宽 kernel_height (int): 卷积核高 input_channels (int): 输入通道数目 返回: int: 浮点运算次数 """ flops_per_point = (kernel_width * kernel_height * input_channels) + 1 return flops_per_point ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值