zoukankan      html  css  js  c++  java
  • CNN 模型复杂度分析

    本文主要介绍 CNN 模型复杂度的分析,通常来说模型复杂度一般我们关注:1)时间复杂度:模型训练和推理速度;2)占用 GPU 大小。


    模型训练和推理速度

    模型的训练和推理速度由“运算量”决定,即 FLOPs,“运算量”代表模型的时间复杂度。FLOPs 越大,模型训练和推理越慢,对于 CNN,每个卷积层运算量如下:

     $$mathtt{FLOPs=[(C_i imes k^2)+(C_i imes k^2 - 1)+1] imes C_o imes W imes H}$$

    其中 $mathtt{C_i}$ 代表输入通道数,$mathtt{C_o}$ 代表输出通道数,$mathtt{k}$ 代表卷积核大小,$mathtt{W}$ 和 $mathtt{H}$ 代表 Feature Maps 的尺寸,上式中的 $mathtt{(C_i imes k^2)}$ 部分为乘法运算,$mathtt{(C_i imes k^2 - 1)}$ 部分为加法运算,$mathtt{+1}$ 为 Bias 运算。而 CV 领域论文中常常将 “Multi-Add” 组合视为一次浮点运算:

    $$mathtt{FLOPs=C_i imes k^2 imes C_0 imes W imes H}$$

    对于 FC 层:

    $$mathtt{FLOPs=[I + (I-1)+1] imes O=2 imes I imes O}$$

    其中 $mathtt{I}$ 代表 Input Nerons,$mathtt{O}$ 代表 Output Nerons。

    对于激活层的参数计算:

    1)Sigmoid:$mathtt{FLOPs=3n}$

    2)ReLU:$mathtt{FLOPs=n}$

    其中 $mathtt{n}$ 代表 $mathtt{n}$ 个神经元,但通常激活层的计算量忽略不计。


    模型占用 GPU 空间大小

     模型占用 GPU 的访存量大小由两部分组成:1)模型的参数量;2)各层输出 Feature Maps 的大小。

    其中模型的参数量只和卷积核的尺寸、通道数和层数相关,与输入数据的大小无关。模型参数量大小对模型具体的影响是,由于维度诅咒的限制,模型的参数越多,训练模型所需的数据量就越大,这会导致模型的训练更容易过拟合。通常模型裁剪可以有效减少模型参数,但由于卷积核的空间尺寸通常已经很小(3x3),而网络的深度又与模型的表征能力紧密相关,不宜过多削减,因此模型裁剪通常最先对通道数进行裁剪。

    Inception 系列就是模型优化的典型例子,当中例如:v1 中 1x1 卷积、GAP 代替 Flatten、v2 中使用两个 3x3 代替 5x5、v3 中用 Nx1 与 1xN 代替 NxN、Xception 中使用 Depth-wise Separable Convolution 等都是优化模型的方法手段,当中一些方法的基本逻辑都是“乘变加”。


    模型复杂度分析工具

    可以用 torchsummary 包来分析模型复杂度。


    所以,不一定模型训练或者推理时占用 GPU 越大,模型的训练或推理速度就越慢。

  • 相关阅读:
    杨巧丽 实验十四 团队项目评审&课程学习总结
    201671010448 杨巧丽 实验四附加实验
    201671010448 杨巧丽 《英文文本统计分析》结对项目报告
    201671010448 词频统计软件项目报告
    201671010448 杨巧丽 实验三 作业互评与改进
    实验一 针对《构建之法》一书自己的几个疑惑
    实验十四 团队项目评审&课程学习总结
    201671010453钟红耀英文文本统计分析》结对项目报告
    词频项目
    钟红耀实验三作业互评与改进报告
  • 原文地址:https://www.cnblogs.com/hmlovetech/p/14582105.html
Copyright © 2011-2022 走看看