本节为ML/DL-复习笔记【九】- 神经网络中各层的计算量与参数量,主要内容包括:标准卷积、空洞卷积、转置卷积、深度可分离卷积以及全连接层的计算量、参数量与输出特征图尺寸计算。

1. 标准卷积

1.1 计算量

  计算量以做乘法和加法的次数为单位,对于输入特征图f=(B,H,W,C),卷积核kernel=(K,S,C,O)【(核尺寸,步长,输入通道数,输出通道数)】。

  首先看一次卷积的计算量,一个k×kk\times kk×k的卷积,执行一次卷积操作,需要k×kk\times kk×k次乘法操作(卷积核每个参数都要和特征图上的像素相乘一次)和k×k−1k\times k-1k×k−1次加法操作(k×kk\times kk×k个数加起来),所以一次卷积需要乘加次数为k×k+k\times k+k×k+k×k−1=2×k×k−1k\times k-1=2\times k\times k-1k×k−1=2×k×k−1。

  接着看在一个特征图上执行卷积需要进行卷积的次数:
(H−K+PhS+1)×(W−K+PwS+1)(\frac{H-K+P_h}{S}+1)\times(\frac{W-K+P_w}{S}+1) (SH−K+Ph​​+1)×(SW−K+Pw​​+1)

  其中Ph,PwP_h,P_wPh​,Pw​是高和宽方向填充的像素。

  然后看C个特征图上还需要乘上C,并且需要输出O个特征图,再考虑batch_size,最终计算量:
B×O×C×(C−1)×(H−K+PhS+1)B\times O\times C\times (C-1)\times(\frac{H-K+P_h}{S}+1) B×O×C×(C−1)×(SH−K+Ph​​+1)
×(W−K+PwS+1)×(2×k×k−1)\times(\frac{W-K+P_w}{S}+1) \times(2\times k\times k-1 ) ×(SW−K+Pw​​+1)×(2×k×k−1)

1.2 参数量

  卷积层参数量仅仅与卷积核大小、偏置和BN有关,对于卷积核kernel=(K,S,C,O),权重参数量K×K×C×OK\times K\times C\times OK×K×C×O,偏置参数量为O,如果使用了BN,那么还有两个可学习参数α,β\alpha,\betaα,β共2×O2\times O2×O,所以该卷积层的参数量为:
K×K×C×O+O+2×OK\times K\times C\times O+O+2\times O K×K×C×O+O+2×O

1.3 输出特征图尺寸

  输入特征图尺寸H×W×CH\times W\times CH×W×C,卷积核kernel=(K,S,C,O,P)【(核尺寸,步长,输入通道数,输出通道数,填充)】,则:
Hout=(H−K+2P)/S+1H_{out}=(H-K+2P)/S+1 Hout​=(H−K+2P)/S+1
Wout=(W−K+2P)/S+1W_{out}=(W-K+2P)/S+1 Wout​=(W−K+2P)/S+1

1.4 计算方式



  具体地,原始卷积核:

  重排列:

  本质上就是卷积矩阵的每一行只是一个重新排列的卷积核矩阵,在不同的地方用零填充:

  然后把输入矩阵拉伸:


2. 空洞卷积

  一个标准卷积的卷积核kernel=(K,S,C,O,P)【(核尺寸,步长,输入通道数,输出通道数,填充)】引入一个超参数d表示扩张率,则核尺寸k变为k+(k-1)*(d-1),相应地,输出特征图尺寸:
Hout=(H−K−(K−1)∗(d−1)+2P)/S+1H_{out}=(H-K-(K-1)*(d-1)+2P)/S+1 Hout​=(H−K−(K−1)∗(d−1)+2P)/S+1
Wout=(W−K−(K−1)∗(d−1)+2P)/S+1W_{out}=(W-K-(K-1)*(d-1)+2P)/S+1 Wout​=(W−K−(K−1)∗(d−1)+2P)/S+1

  空洞卷积并没有引入额外的参数量,但是显然会增加计算量。

3. 转置卷积

3.1 特征图尺寸

  转置卷积的输入是标准卷积的输出,二者对调即可:
Hin=(Hout−K+2P)/S+1H_{in}=(H_{out}-K+2P)/S+1 Hin​=(Hout​−K+2P)/S+1
Win=(Wout−K+2P)/S+1W_{in}=(W_{out}-K+2P)/S+1 Win​=(Wout​−K+2P)/S+1
⟹\Longrightarrow ⟹
Hout=(Hin−1)×S−2P+KH_{out}=(H_{in}-1)\times S-2P+K Hout​=(Hin​−1)×S−2P+K
Wout=(Win−1)×S−2P+KW_{out}=(W_{in}-1)\times S-2P+K Wout​=(Win​−1)×S−2P+K

3.2 计算方式

  对于转置卷积:

4. 深度可分离卷积

特征图尺寸计算核标准卷积一样。

4.1 计算量

  输入特征图尺寸(Df,Df,M),(D_f,D_f,M),(Df​,Df​,M),卷积核(Dk,Dk,M,N)[卷积核尺寸,输入和输出通道数](D_k,D_k,M,N)[卷积核尺寸,输入和输出通道数](Dk​,Dk​,M,N)[卷积核尺寸,输入和输出通道数],输出特征图尺寸(DG,DG,N)(D_G,D_G,N)(DG​,DG​,N),计算量:
DK∗DK∗M∗N∗DF∗DFD_K*D_K*M*N*D_F*D_FDK​∗DK​∗M∗N∗DF​∗DF​
  拆分之后,深度卷积负责滤波,尺寸(Dk,Dk,1,M)(D_k,D_k,1,M)(Dk​,Dk​,1,M),输出特征图(DG,DG,M)(D_G,D_G,M)(DG​,DG​,M);逐点卷积负责通道转换,尺寸(1,1,M,N)(1,1,M,N)(1,1,M,N),最终输出(DG,DG,N)(D_G,D_G,N)(DG​,DG​,N),计算量:
DK∗DK∗M∗DF∗DF+M∗N∗DF∗DFD_K*D_K*M*D_F*D_F+M*N*D_F*D_FDK​∗DK​∗M∗DF​∗DF​+M∗N∗DF​∗DF​

4.2 参数量

M∗K∗K+N∗MM*K*K+N*M M∗K∗K+N∗M

5. 全连接层

  考虑输入特征图尺寸7×7×5127\times 7\times 5127×7×512,全连接层将特征图展开为一维向量1×40961\times 40961×4096,实际上用了4096个7×7×5127\times 7\times 5127×7×512的滤波器去做卷积,参数量来到了7×7×512×4096=1027604487\times 7\times 512\times 4096=1027604487×7×512×4096=102760448,这也就是常说的全连接层参数冗余,能够占到整个网络参数的80%以上。

  全连接层计算量和参数量的计算方法一样。

参考:

  • 卷积神经网络参数量和计算量的计算
    (https://blog.csdn.net/liuweiyuxiang/article/details/99637649)
  • CNN中卷积层参数量与输出特征图(feature map)尺寸的计算公式
    (https://blog.csdn.net/gaishi_hero/article/details/81512404)
  • 卷积,特征图,转置卷积和空洞卷积的计算细节
    (https://www.jianshu.com/p/09ea4df7a788)
  • 看懂转置卷积
    (http://www.360doc.com/content/19/0507/12/57110788_834069126.shtml)
  • CNN卷积层、全连接层的参数量、计算量(https://zhuanlan.zhihu.com/p/77471991)

欢迎扫描二维码关注微信公众号 深度学习与数学   [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]

ML/DL-复习笔记【九】- 神经网络中各层的计算量与参数量相关推荐

  1. 神经网络计算量及参数量

    目录 前言 卷积 全连接 资料引用 前言 笔者基于以下学习材料进行整理 ①<Deeplearning.ai深度学习教程中文笔记>-作者: 吴恩达 - https://github.com/ ...

  2. 吴恩达《机器学习》学习笔记九——神经网络相关(1)

    吴恩达<机器学习>学习笔记九--神经网络相关(1) 一. 非线性假设的问题 二. 神经网络相关知识 1.神经网络的大致历史 2.神经网络的表示 3.前向传播:向量化表示 三. 例子与直觉理 ...

  3. python 神经网络中隐藏层的作用是什么?

    引用文章1: hidden layer隐藏层的自我理解 https://blog.csdn.net/c45449210/article/details/82957455 引用文章2: 对隐藏层的简单理 ...

  4. 《MFC游戏开发》笔记九 游戏中的碰撞判定初步怪物运动简单AI

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9374935 作者:七十一雾央 新浪微博:http:// ...

  5. (tensorflow笔记)神经网络中的一些关键概念(学习率、激活函数、损失函数、欠拟合和过拟合、正则化和优化器)

    目录 1.神经网络复杂度 空间复杂度 时间复杂度 2.学习率策略 指数衰减学习率 分段常数衰减 3.激活函数 sigmoid tanh ReLU Leaky ReLU 建议 4.损失函数 均方误差损失 ...

  6. 【阅读笔记】神经网络中的LRP及其在非线性神经网络中的运用

    Layer-Wise Relevance Propagation for Neural Networks with Local Renormalization Layers主要介绍了一种将LRP扩展到 ...

  7. 深度学习笔记(九):神经网络剪枝(Neural Network Pruning)详细介绍

    文章目录 1:What is pruning 2:Pruning in MLP(多层感知机) 2.2 How to make mask 3.Pruning in CNN(卷积神经网络) 1:What ...

  8. 深入学习卷积神经网络中卷积层和池化层的意义(转)

    为什么要使用卷积呢? 在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量:需要人工设计特征,然后将这些特征计算的值组成特征向量,在过去几十年的经验来看,人工找到的特征并不是怎么好用 ...

  9. 高等数学复习笔记(五)-一元函数积分的计算

    本节为高等数学复习笔记的第五部分,一元函数积分的计算,主要包括: 四大积分基本法即凑微分法.换元法(第一类和第二类).分部积分法以及有理函数积分法. 1. 凑微分法 1.1 基本导数公式(反过来用) ...

  10. 深入学习卷积神经网络中卷积层和池化层的意义

    为什么要使用卷积呢? 在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量:需要人工设计特征,然后将这些特征计算的值组成特征向量,在过去几十年的经验来看,人工找到的特征并不是怎么好用 ...

最新文章

  1. 文巾解题 46. 全排列
  2. U盘安装LINUX系统,拔除U盘后无法引导系统
  3. opencv java 去干扰_java - OpenCV Java修补图像格式要求 - 堆栈内存溢出
  4. 原子自增_小学妹教你并发编程的三大特性:原子性、可见性、有序性
  5. java创建solr core_Error CREATEing SolrCore 'new_core':Unable to create core [new_core]
  6. Java事件处理机制的两个案例
  7. 讯飞输入法pad版x86_讯飞输入法Pad版x86版
  8. 【UmiJS学习】01-快速上手
  9. 小程序input获得焦点触发_小程序文本框焦点 小程序input自动获取焦点
  10. python中汉字如何转拼音?(PyPinyin 的基础用法)
  11. 对比度 css_更好的颜色和对比度可访问性CSS技巧
  12. linux uvc 拍照程序,Linux UVC driver
  13. springboot项目集成大数据第三方dolphinscheduler调度器
  14. 海洋测绘各种数据考点
  15. LR脚本录制3——Fiddler生成LR脚本(推荐)
  16. MicroChip C18编译器上手及环境设置
  17. 【MySQL】【入门】第二章:数据库及表的创建
  18. iOS 指纹、Face ID验证 --- LocalAuthentication
  19. 文件管理之文件共享与文件保护
  20. W3C DOM 事件模型(简述)

热门文章

  1. Burp Suite Scanner Module - 扫描模块
  2. HDU1251 统计难题 trie树
  3. Mysql索引会失效的几种情况
  4. Thinking in Java 11.13.1适配器方法惯用法
  5. SqlServer中使用游标进行双重遍历
  6. 每日一道剑指offer-反转链表
  7. ios transporter 缓存_鸿蒙和安卓都是开源,为什么iOS系统却可以获得出色的口碑?...
  8. springboot2集成hbase2环境搭建
  9. c int最小值的宏_20个成熟软件中常用的宏定义,赶快收藏!
  10. python设置字符_Python基础教程 将字符串格式设置功能用于字典