卷积神经网络的时间、空间复杂度以及数据流的变化

本文深入探讨了卷积神经网络(CNN)的时间复杂度和空间复杂度,分析了其对模型训练时间和参数数量的影响,以及如何通过调整网络结构来优化模型效率。

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

0 前言

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

1. 时间复杂度

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

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

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

注1:为了简化表达式变量个数,统一假设输入和卷积核的形状是正方形,实际中如果不是,则将M ^2替换成特征图的长宽相乘即可;

注2:每一层卷积都包含一个偏置参数(bias),这里也给忽略了。加上的话时间复杂度则为:O(M^2 * K^2 * Cin * Cout+Cout)。

2.空间复杂度

空间复杂度即模型的参数数量

单个卷积的空间复杂度:Space~O(K^2 * Cin * Cout) 

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

3. 数据流的变化

设计好了网络结构之后,网络的卷积核大小,通道,步长,padding等都已经确定了,那么一个好的工程师应该非常清楚输入数据在每一层的流动情况。

计算公式:

W_{2}=\left (W_{1}-F+2P \right )/S+1

H_{2}=\left (H_{1}-F+2P \right )/S+1

  • W_{1} :卷积前图像的宽度;
  • W_{2} :卷积后Feature Map的宽度;
  • H_{_{1}} :卷积前图像的高度;
  • H_{_{2}}: 卷积后Feature Map的高度;
  • P :padding数量;
  • S:stride步长.
     

首先计算一下最简单的LeNet。网络结构如下:

下面是我自己论文中的一个架构图,之前一直是直接调用TensorFlow网络运行,没有关注过数据流的走向,通过今天的梳理发现全连接层确实是挺占内存的。另外计算时间复杂度的话,和输入输出feature map的大小有关,网上有人说为什么设计网络的通道数先小后大,是为了维护前面和后面的卷积计算量平衡,由此看也是有些道理的吧。[注:我的架构图在第3,7,9层卷积前面各有一个最大池化操作,在图中没有标出]

 改进Resnet架构:

 数据流变化:

网络层(操作)输入filterstridepadding输出计算公式参数量
Input57\times57\times1-----0
Conv157\times57\times11\times51157\times57\times161\times5\times1\times16+1696
Conv257\times57\times165\times11157\times57\times165\times1\times1\times16+1696
Max Pool157\times57\times16-2-29\times29\times16--
Conv329\times29\times163\times31129\times29\times163\times3\times16\times16+162320
Conv429\times29\times163\times31129\times29\times163\times3\times16\times16+162320
Conv529\times29\times163\times31129\times29\times163\times3\times16\times16+162320
Conv629\times29\times163\times31129\times29\times163\times3\times16\times16+162320
Max Pool229\times29\times16-2-15\times15\times16--
Conv715\times15\times163\times31115\times15\times323\times3\times16\times32+324640
Conv815\times15\times323\times31115\times15\times323\times3\times32\times​​​​​​​32+324640
Max Pool315\times15\times32-218\times8\times32--
Conv98\times8\times323\times3118\times8\times323\times3\times32\times​​​​​​​32+324640
Conv108\times8\times323\times3118\times8\times323\times3\times32\times​​​​​​​32+324640
Conv118\times8\times323\times3118\times8\times323\times3\times32\times​​​​​​​32+324640
Conv128\times8\times323\times3118\times8\times323\times3\times32\times​​​​​​​32+324640
Max Pool48\times8\times32-214\times4\times32--
FC14\times4\times32---5124\times4\times32\times​​​​​​​512+512262656
FC2512---4512*4+42052

 

 

参考网址:

CNN复杂度分析

 

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Briwisdom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值