深度学习之(经典)卷积层计算量以及参数量总结 (考虑有无bias,乘加情况)
目录:
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,乘加情况)的更多相关文章
- [源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区
[源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区 目录 [源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区 0x00 摘要 0x01 前言 1.1 P ...
- 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 深度学习笔记 (一) 卷积神经网络基础 (Foundation of Convolutional Neural Networks)
一.卷积 卷积神经网络(Convolutional Neural Networks)是一种在空间上共享参数的神经网络.使用数层卷积,而不是数层的矩阵相乘.在图像的处理过程中,每一张图片都可以看成一张“ ...
- 学习笔记TF014:卷积层、激活函数、池化层、归一化层、高级层
CNN神经网络架构至少包含一个卷积层 (tf.nn.conv2d).单层CNN检测边缘.图像识别分类,使用不同层类型支持卷积层,减少过拟合,加速训练过程,降低内存占用率. TensorFlow加速所有 ...
- SIGAI深度学习第九集 卷积神经网络3
讲授卷积神经网络面临的挑战包括梯度消失.退化问题,和改进方法包括卷积层.池化层的改进.激活函数.损失函数.网络结构的改 进.残差网络.全卷机网络.多尺度融合.批量归一化等 大纲: 面临的挑战梯度消失问 ...
- 深度学习项目——基于卷积神经网络(CNN)的人脸在线识别系统
基于卷积神经网络(CNN)的人脸在线识别系统 本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统,系统将由以下几个部分构成: 制作人脸数据集.CNN神经网络模型训练.人脸检测.人脸 ...
- 如何可视化深度学习网络中Attention层
前言 在训练深度学习模型时,常想一窥网络结构中的attention层权重分布,观察序列输入的哪些词或者词组合是网络比较care的.在小论文中主要研究了关于词性POS对输入序列的注意力机制.同时对比实验 ...
- 深度学习之depthwise separable convolution,计算量及参数量
目录: 1.什么是depthwise separable convolution? 2.分析计算量.flops 3.参数量 4.与传统卷积比较 5.reference
- 自己动手实现深度学习框架-7 RNN层--GRU, LSTM
目标 这个阶段会给cute-dl添加循环层,使之能够支持RNN--循环神经网络. 具体目标包括: 添加激活函数sigmoid, tanh. 添加GRU(Gate Recurrent U ...
随机推荐
- C++STL中的unique函数
头文件:#include<iostream> 函数原型:iterator unique(iterator it_1,iterator it_2); 作用:元素去重,即”删除”序列中所有相邻 ...
- 【BZOJ2022】Pku1837 Balance
Description Gigel has a strange "balance" and he wants to poise it. Actually, the device i ...
- windows10 gcc编译C程序(分步编译)
下面演示gcc对C源程序的分步编译过程: 1. 编译(Compile) gcc hello.cpp -c # 生成hello.o,目标文件名字和源文件名字一样,VC编译会生成.ojb文件,gcc编译器 ...
- linux文件夹目录含义及用途
/boot,存放linux启动文件和内核: /initrd,boot loader initialized RAM disk,就是由boot loader初始化的内存盘.在linux内核启动前,boo ...
- 基于数组阻塞队列 ArrayBlockingQueue 的一个队列工具类
java语言基于ArrayBlockingQueue 开发的一个根据特定前缀和后缀的队列.每天自动循环生成. 1.定义队列基类 Cookie package com.bytter.util.queue ...
- sqli-labs(32)
0x1查看源代码 (1)代码关键点 很明显,代码中利用正则匹配将 [ /,'," ]这些三个符号都过滤掉了 preg_replace 0x2 宽字符注入 (1)前言 在mysql中,用于转义 ...
- sqli-labs(28a)
0X01构造闭合 爆字段数 /?id=') order by 1%23 ?id=') order by 5%23 偷看一下源码 就只过滤了union select 闭合') 那我们来尝试一下 0X02 ...
- ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'ambari'
配置Ambari远程maridb 报错: ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'ambari' ...
- mysql 5.7分组报错问题 Expression #1 of ORDER BY clause is not in GROUP BY clause 的问题 MySQL
解决方案: select version(),@@sql_mode;SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); ...
- ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)K Kingdom Roadmap
K: 给你n个点以及n-1的条边, 问你最少要加多少条边,使得每两个点割去一条联通的边,还可以使的这两个点连通. 有个一个结论,最少添加的边数为(叶子节点数+1)/ 2. 我们可以只考虑叶子节点数应该 ...