卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)
分享一些公式计算张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算。
以AlexNet网络为例,以下是该网络的参数结构图。

AlexNet网络的层结构如下:
1.Input: 图像的尺寸是227*227*3.
2.Conv-1: 第1层卷积层的核大小11*11,96个核。步长(stride)为4,边缘填充(padding)为0。
3.MaxPool-1: 池化层-1对Conv-1进行池化,尺寸为3*3,步长为2.
4.Conv-2: 核尺寸:5*5,数量:256,步长:1,填充:2
5.MaxPool-2: 尺寸:3*3,步长:2
6.Conv-3: 核尺寸:3*3,数量:384,步长:1,填充:1
7: Conv-4: 结构同Conv-3.
8. Conv-5: 核尺寸:3*3,数量:256,步长:1,填充:1
9. MaxPool-3: 尺寸:3*3,步长:2
10.FC-1: 全连接层1共有4096个神经元。
11.FC-1: 全连接层2共有4096个神经元。
12.FC-3: 全连接层3共有1000个神经元。
接下来,我们对以上的网络结构进行描述:
1.如何计算张量(图像)的尺寸;
2.如何计算网络的总参数;
卷积层(Conv Layer)的输出张量(图像)的大小
定义如下:
O=输出图像的尺寸。
I=输入图像的尺寸。
K=卷积层的核尺寸
N=核数量
S=移动步长
P =填充数
输出图像尺寸的计算公式如下:

输出图像的通道数等于核数量N。
示例:AlexNet中输入图像的尺寸为227*227*3.第一个卷积层有96个尺寸为11*11*3的核。步长为4,填充为0.

输出的图像为55*55*96(每个核对应1个通道)。
池化层(MaxPool Layer)的输出张量(图像)的大小
定义如下:
O=输出图像的尺寸。
I=输入图像的尺寸。
S=移动步长
PS=池化层尺寸
输出图像尺寸的计算公式如下:

不同于卷积层,池化层的输出通道数不改变。
示例:每1层卷积层后的池化层的池化层尺寸为3*3,步长为2。根据前面卷积层的输出为55*55*96。池化层的输出图像尺寸如下:

输出尺寸为27*27*96。
全连接层(Fully
Connected Layer)的输出张量(图像)的大小
全连接层输出向量长度等于神经元的数量。
通过AlexNet改变张量(图像)的尺寸的结构如下:
在AlexNet网络中,输出的图像尺寸为227*227*3.
Conv-1,尺寸变为55*55*96,池化层后变为27*27*96。
Conv-2,尺寸变为27*27*256,池化层后变为13*13*256.
Conv-3,尺寸变为13*13*384,经过Conv-4和Conv-5变回13*13*256.
最后,MaxPool-3尺寸缩小至6*6*256.
图像通过FC-1转换为向量4096*1.通过FC-2尺寸未改变.最终,通过FC-3输出1000*1的尺寸张量.
接下来,计算每层的参数数量.
Conv Layer参数数量
在CNN中,每层有两种类型的参数:weights
和biases.总参数数量为所有weights和biases的总和.
定义如下:
WC=卷积层的weights数量
BC=卷积层的biases数量
PC=所有参数的数量
K=核尺寸
N=核数量
C =输入图像通道数
卷积层中,核的深度等于输入图像的通道数.于是每个核有K*K个参数.并且有N个核.由此得出以下的公式.

示例:AlexNet网络中,第1个卷积层,输入图像的通道数(C)是3,核尺寸(K)是11*11,核数量是96. 该层的参数计算如下:

计算出Conv-2, Conv-3,
Conv-4, Conv-5 的参数分别为 614656 , 885120, 1327488 和884992.卷积层的总参数就达到3,747,200.
MaxPool Layer参数数量
没有与MaxPool layer相关的参数量.尺寸,步长和填充数都是超参数.
Fully Connected (FC) Layer参数数量
在CNN中有两种类型的全连接层.第1种是连接到最后1个卷积层,另外1种的FC层是连接到其他的FC层.两种情况我们分开讨论.
类型1:连接到Conv Layer
定义如下:
Wcf= weights的数量
Bcf= biases的数量
O= 前卷积层的输出图像的尺寸
N = 前卷积层的核数量
F = 全连接层的神经元数量

示例: AlexNet网络中第1个FC层连接至Conv Layer.该层的O为6,N为256,F为4096.

参数数目远大于所有Conv Layer的参数和.
类型2:连接到FC Layer
定义如下:
Wff= weights的数量
Bff= biases的数量
Pff= 总参数的数量
F= 当前FC层的神经元数量
F-1 = 前FC层的神经元数量

示例:AlexNet的最后1个全连接层, F-1=4096,F=1000 .

AlexNet网络中张量(图像)尺寸和参数数量
AlexNet网络中总共有5个卷积层和3个全连接层.总共有62,378,344个参数.以下是汇总表.
|
Layer Name |
Tensor Size |
Weights |
Biases |
Parameters |
|
Input Image |
227x227x3 |
0 |
0 |
0 |
|
Conv-1 |
55x55x96 |
34,848 |
96 |
34,944 |
|
MaxPool-1 |
27x27x96 |
0 |
0 |
0 |
|
Conv-2 |
27x27x256 |
614,400 |
256 |
614,656 |
|
MaxPool-2 |
13x13x256 |
0 |
0 |
0 |
|
Conv-3 |
13x13x384 |
884,736 |
384 |
885,120 |
|
Conv-4 |
13x13x384 |
1,327,104 |
384 |
1,327,488 |
|
Conv-5 |
13x13x256 |
884,736 |
256 |
884,992 |
|
MaxPool-3 |
6x6x256 |
0 |
0 |
0 |
|
FC-1 |
4096×1 |
37,748,736 |
4,096 |
37,752,832 |
|
FC-2 |
4096×1 |
16,777,216 |
4,096 |
16,781,312 |
|
FC-3 |
1000×1 |
4,096,000 |
1,000 |
4,097,000 |
|
Output |
1000×1 |
0 |
0 |
0 |
|
Total |
62,378,344 |
卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)的更多相关文章
- 卷积神经网络CNN原理以及TensorFlow实现
在知乎上看到一段介绍卷积神经网络的文章,感觉讲的特别直观明了,我整理了一下.首先介绍原理部分. [透析] 卷积神经网络CNN究竟是怎样一步一步工作的? 通过一个图像分类问题介绍卷积神经网络是如何工作的 ...
- python机器学习卷积神经网络(CNN)
卷积神经网络(CNN) 关注公众号"轻松学编程"了解更多. 一.简介 卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人 ...
- 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 深度学习之卷积神经网络(CNN)详解与代码实现(一)
卷积神经网络(CNN)详解与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10430073.html 目 ...
- 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 卷积神经网络CNN学习笔记
CNN的基本结构包括两层: 特征提取层:每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征.一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来: 特征映射层:网络的每个计算层由多 ...
- 卷积神经网络(CNN,ConvNet)
卷积神经网络(CNN,ConvNet) 卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的.在短时间内,变成了一种颠覆性的技术,打破了从文本.视频到语音等多个领域所有最先进的算法,远远超出 ...
- TensorFlow 2.0 深度学习实战 —— 浅谈卷积神经网络 CNN
前言 上一章为大家介绍过深度学习的基础和多层感知机 MLP 的应用,本章开始将深入讲解卷积神经网络的实用场景.卷积神经网络 CNN(Convolutional Neural Networks,Conv ...
- 卷积神经网络(CNN)前向传播算法
在卷积神经网络(CNN)模型结构中,我们对CNN的模型结构做了总结,这里我们就在CNN的模型基础上,看看CNN的前向传播算法是什么样子的.重点会和传统的DNN比较讨论. 1. 回顾CNN的结构 在上一 ...
随机推荐
- 如何使用HackRF做一个简单的IMSI捕获器
关于IMSI IMSI为国际用户识别码(International Mobile Subscriber Identity)的缩写,是用于区分蜂窝网络中不同用户的,在所在蜂窝网络中不重复的识别码.IMS ...
- 指向函数的指针 ------ 函数指针(function pointer)
函数指针: 指向函数的指针, 首先是一个指针, 这个指针指向一个函数. 函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向函数的代码.一个函数的地址是该函数的进入点,也是调用函数 ...
- video自动填充满父级元素
想要video能自动填充慢父div的大小,只要给video标签加上style="width= 100%; height=100%; object-fit: fill"即可. obj ...
- 3.5 unittest生成测试报告HTMLTestRunner
3.5 unittest生成测试报告HTMLTestRunner 前言批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的.unittest里面是不 ...
- 【linux基础】关于ARM板子使用O3编译选项优化
前言 应领导要求需要将最初级版本的算法移植到ARM板子上,并进行优化,以期达到实时. 平台 移植前: TX2 移植后: ARM() processor : model name : ARMv7 Pro ...
- Python全栈之路----编程基本情况介绍
1.多种编程语言的区别 (1)C\C++:学习成本高,学习周期长,偏系统底层,在开发硬件驱动.嵌入式.游戏引擎开发等领域有广泛应用. (2)JAVA:目前使用最广泛的编程语言,第一个跨平台运行的语言, ...
- jmeter4.0安装记录
前提:jmeter需配置环境变量jdk,jmeter4.0版本需1.7以上版本, 查看jdk版本命令java -version 1.官网http://jmeter.apache.org/downloa ...
- Python服务Dokcer化并k8s部署实例
这篇文章记录了我试验将一个基于python的服务docker化并k8s部署的过程. 服务介绍Docker化设计业务代码改造创建docker镜像K8S部署设计yaml文件运行服务介绍这是一个用 pyth ...
- C# 代码小技巧
一 .自动属性. 1.vs下输入prop,Tab键就出现了. 2.有了自动属性,我们不用再额外为一个类的每个公共属性定义一个私有字段(实际上没多大用处的字段), 但是通过反射还是可以看到对应的私有 ...
- 【OpenStack】network相关知识学习
network 类型 local:通信不跨主机,必须同一网段,主要做单机测试使用: flat:统计可以跨主机,但是需要在同一网段: 每个 flat network 都会独占一个物理网卡 计算节点上 b ...