如何计算模型的复杂度(参数量,FLOPs)

参考

如何计算神经网络模型的复杂度
深度学习卷积、全连接层、深度可分离层参数量和FLOPs计算公式

概念

  1. Params:模型的参数量。(空间复杂度
  2. FLOPs:FLoating point Operations,前向推理的计算量。(时间复杂度
  3. MAC:Memory Access Cost。基本上看每个计算输出结果 C o u t × H o u t × W o u t C_{out} \times H_{out} \times W_{out} Cout×Hout×Wout 相加的总和。
  4. MACC(MADD):multiply-accumulate operations:先乘起来再加起来的运算次数。 也就是 乘加 看做一次运算。
    所以 1个 MACC = 2个 FLOPs。
  5. 内存量

H i n H_{in} Hin: 输入的 height
W i n W_{in} Win: 输入的 width
H o u t H_{out} Hout: 输出的 height
W o u t W_{out} Wout: 输入的 width
K K K: 卷积核size
C i n C_{in} Cin: 输入的channel 数
C o u t C_{out} Cout

### 如何计算深度学习模型复杂度 #### 方法和指标概述 对于深度学习模型而言,其复杂度主要由两个方面决定:一是计算(FLOPs),二是参数量(parameters)[^1]。这两个因素共同决定了模型的时间复杂度(运算效率)以及空间复杂度(内存占用情况)[^2]。 #### 参数量的定义及其重要性 参数量是指构成神经网络结构中的权重(weight)与偏置(bias)的数量总和。较大的参数量意味着更强大的表达能力,但也可能导致过拟合现象的发生;反之,则可能造成欠拟合。因此,在实际应用过程中需要找到合适的平衡点来调整参数规模大小以达到最佳效果[^3]。 #### FLOPs的概念及作用 FLOPs代表每秒执行多少次浮点运算操作(floating-point operations per second), 它用来衡量计算机系统的处理速度, 同样也可以用于描述一个算法或程序所需的计算资源消耗程度。具体到深度学习领域,FLOPs可以反映整个训练过程所需完成的任务总量, 是评价不同架构之间性能差异的重要依据之一。 #### MACs的理解 MAC (Multiply-Accumulate Operations)乘积累加操作是卷积层中最基本也是最常见的运算单元形式。由于大多数现代GPU都针对此类指令进行了优化设计, 所以其数量往往成为影响最终推理耗时的关键要素。通常情况下,MACs会比理论上的FLOPs要少一半左右因为每次累加只需要一次读取而不是两次独立访问地址空间内的数值。 #### 实际案例展示 为了更好地说明上述概念之间的关系, 下面给出一段Python代码片段作为实例演示: ```python import tensorflow as tf from tensorflow.keras import layers def get_model_complexity(model): flops = tf.profiler.experimental.profile( model, options=tf.profiler.ProfileOptionBuilder.float_operation()) params = sum([tf.size(var).numpy() for var in model.trainable_variables]) print('Total number of parameters:',params,'; Total FLOPS:',flops.total_float_ops) # 构建简单的CNN模型并获取其复杂度信息 model = tf.keras.Sequential([ layers.Conv2D(filters=64,kernel_size=(3,3),input_shape=(28,28,1)), layers.MaxPooling2D(pool_size=(2,2)) ]) get_model_complexity(model) ``` 此段脚本利用TensorFlow框架下的`profiler`工具实现了自动统计给定Keras序列式API构建而成的小型二维卷积神经网络(Convolutional Neural Network,CNN)内部各部分所涉及的具体参数数目以及总的浮点运算次数的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

RessCris

老铁门多支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值