目录:

1、经典的卷积层是如何计算的

2、分析卷积层的计算量

3、分析卷积层的参数量

4、pytorch实现自动计算卷积层的计算量和参数量


1、卷积操作如下:

http://cs231n.github.io/assets/conv-demo/index.html

假设卷积层的输入特征图大小为C_in x H x W, 卷积核大小为K_1 x K_2, padding = P_1 x P_2, stride = S_1 x S_2, filter 数目为C_out。

输出的特征图大小为C_out x H_out x W_out, 其中

  H_out = [(H - K_1 + 2P_1) / S_1] + 1

  W_out = [(W - K_2 + 2P_2) / S_2] + 1

[]表示向下取整。


2、计算量分析

只考虑乘法计算量:

为了得到输出的特征图的某一个位置的像素值,需要 C_in x K_1 x K_2次乘法操作,而特征图总共有C_out x H_out x W_out个像素,因此总计算量为

                    C_out x H_out x W_out x ( C_in x K_1 x K_2)

同时考虑乘法和加法计算量:

1)bias=true,即考虑偏置的情况

乘法操作计算量:

为了得到输出的特征图的某一个位置的像素值,需要 C_in x K_1 x K_2 次乘法操作,而特征图总共有C_out x H_out x W_out个像素,因此总计算量为

                    C_out x H_out x W_out x ( C_in x K_1 x K_2)

加法操作计算量:

为了得到输出的特征图的某一个位置的像素值,需要 (C_in x (K_1 x K_2 - 1)) + (C_in - 1) + 1  = C_in x K_1 x K_2 次加法操作,可以看成三部分,第一部分表示在某一个通道进行一个K_1 x K_2 大小的卷积操作需要 (K_1 x K_2 - 1)次加法,有C_in个通道,故 C_in x (K_1 x K_2 - 1)次加法,每个通道都卷积后,得到C_in个数,接下来需要有 C_in - 1次加法,最后加上bias又1次加法。 而特征图总共有C_out x H_out x W_out个像素,因此总加法计算量为

                    C_out x H_out x W_out x ( C_in x K_1 x K_2)

因此综上所述,乘加法计算量为 2 x  C_out x H_out x W_out x (C_in x K_1 x K_2)次

Note that:

当前一般浮点操作数(flops),一般只看卷积乘法以及加上bias的一次加法。

bias=true, flops = C_out x H_out x W_out x ( C_in x K_1 x K_2 + 1)

bias=false, flops= C_out x H_out x W_out x ( C_in x K_1 x K_2)

2)bias=false,不考虑偏置情况。根据上述分析,无bias情况下乘加法计算量为C_out x H_out x W_out x (2 x C_in x K_1 x K_2 - 1)次


3、参数量分析

卷积核参数量:

C_out x C_in x K_1 x K_2

bias参数量:

C_out

因此总参数量为 C_out x C_in x K_1 x K_2 + C_out


4、pytorch实现

深度学习之(经典)卷积层计算量以及参数量总结 (考虑有无bias,乘加情况)的更多相关文章

  1. [源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区

    [源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区 目录 [源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区 0x00 摘要 0x01 前言 1.1 P ...

  2. 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  3. 深度学习笔记 (一) 卷积神经网络基础 (Foundation of Convolutional Neural Networks)

    一.卷积 卷积神经网络(Convolutional Neural Networks)是一种在空间上共享参数的神经网络.使用数层卷积,而不是数层的矩阵相乘.在图像的处理过程中,每一张图片都可以看成一张“ ...

  4. 学习笔记TF014:卷积层、激活函数、池化层、归一化层、高级层

    CNN神经网络架构至少包含一个卷积层 (tf.nn.conv2d).单层CNN检测边缘.图像识别分类,使用不同层类型支持卷积层,减少过拟合,加速训练过程,降低内存占用率. TensorFlow加速所有 ...

  5. SIGAI深度学习第九集 卷积神经网络3

    讲授卷积神经网络面临的挑战包括梯度消失.退化问题,和改进方法包括卷积层.池化层的改进.激活函数.损失函数.网络结构的改 进.残差网络.全卷机网络.多尺度融合.批量归一化等 大纲: 面临的挑战梯度消失问 ...

  6. 深度学习项目——基于卷积神经网络(CNN)的人脸在线识别系统

    基于卷积神经网络(CNN)的人脸在线识别系统 本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统,系统将由以下几个部分构成: 制作人脸数据集.CNN神经网络模型训练.人脸检测.人脸 ...

  7. 如何可视化深度学习网络中Attention层

    前言 在训练深度学习模型时,常想一窥网络结构中的attention层权重分布,观察序列输入的哪些词或者词组合是网络比较care的.在小论文中主要研究了关于词性POS对输入序列的注意力机制.同时对比实验 ...

  8. 深度学习之depthwise separable convolution,计算量及参数量

    目录: 1.什么是depthwise separable convolution? 2.分析计算量.flops 3.参数量 4.与传统卷积比较 5.reference

  9. 自己动手实现深度学习框架-7 RNN层--GRU, LSTM

    目标         这个阶段会给cute-dl添加循环层,使之能够支持RNN--循环神经网络. 具体目标包括: 添加激活函数sigmoid, tanh. 添加GRU(Gate Recurrent U ...

随机推荐

  1. Python黑科技 | Python中四种运行其他程序的方式

    在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程,可以使用win32proc ...

  2. (54)LINUX应用编程和网络编程之九Linux网络通信实践

    3.9.1.linux网络编程框架 3.9.1.1.网络是分层的 (1)OSI 7层模型(理论指导) (2)网络为什么要分层 (3)网络分层的具体表现 3.9.1.2.TCP/IP协议引入(网络分层实 ...

  3. [BZO3572][HNOI2014]世界树:虚树+倍增

    分析 思维难度几乎为\(0\)的虚树码农(并不)题. 代码 #include <bits/stdc++.h> #define rin(i,a,b) for(register int i=( ...

  4. A - 地震预测

    A - 地震预测 怀特先生是一名研究地震的科学家,最近他发现如果知道某一段时间内的地壳震动能量采样的最小波动值之和,可以有效地预测大地震的发生. 假设已知一段时间的n次地壳震动能量的采样值为a1,a2 ...

  5. 20道JS原理题助你面试一臂之力!(转)

    20道JS原理题助你面试一臂之力! 前言 本文针对目前常见的面试题,仅提供了相应的核心原理及思路,部分边界细节未处理.后续会持续更新,希望对你有所帮助. 1. 实现一个call函数 // 思路:将要改 ...

  6. vue动态监听浏览器窗口高度

    HTML: <div ref="page"></div> JS: data(){ return{ clientHeight:'', } } mounted( ...

  7. vscode中让html中php代码高亮

    找到设置中的文件设置中的files.associations,增加以下内容(注意一下内容要放在右侧的用户设置中,而不是放在中间的默认设置中): { // Configure file associat ...

  8. 模板引擎ejs的include方法

    html无法include header.ejs footer.ejs 最后用 user.ejs在首尾include

  9. django的url的name参数的意义及view中reverse

    Templates的链接地址都是根据urlpatterns定义的地址,拼凑成地址字符串,很难看,而且Templates里拼凑成的地址,随着页面的增加而不断增加,一旦在urlpatterns里的某个地址 ...

  10. SELECT-OPTIONS对象

    1. SELECT-OPTIONS基本语法及定义 SELECT-OPTIONS通常用于参照一数据库字为建立数据输入域,其定义对象命名长度不能超过8位,其产生的屏幕对象最大输入长度为18位,语法如下: ...