cnn池化层输入通道数_卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)..._weixin_39792393的博客-程序员秘密

技术标签: 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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39792393/article/details/111555624

智能推荐

记一次公网postgresql数据库服务器被入侵为矿机的定位过程_pgsql被入侵_萝卜吃鱼914的博客-程序员秘密

今天中午群里有一个群友反馈pg服务器cpu使用率高达1700%,处于好奇自己就帮着他一起定位了一下问题,以下记录一下定位问题的过程方便以后做复盘管理!现象截图如下:一、查看cpu情况和服务器平均负载情况得知各个cpu的使用率并不是很高呀,为什么执行top命令看到postgresql进程的cpu使用是1700%呢?没有头绪我们继续往下看二、查看一下服务器的负载情况呢有问题了,你服务...

java app支付_java微信支付—APP_weixin_39655085的博客-程序员秘密

我在网上查找了很多关于微信支付的案例很多但是部分讲的不是很细节,自己拿过来以后不知道如何去使用比较乱。我这几天研究了一下微信的支付v2的文档目前自己还是一个头脑简单的码农如果我哪里有啥不对的欢迎大家来指点一下,谢谢大家!!!!!!!!!!!!!我们都知道微信支付的app相关的接口是要封装好app传过来的相关参数数据打包给前端来唤起支付,其中最令人头疼的可能就是签名。好多人你不理解签名是怎么回事。其...

出自上帝之手的精妙算法 - Algorithm from THE BOOK (2)_水滴杂谈的博客-程序员秘密

接着 出自上帝之手的精妙算法 - Algorithm from THE BOOK (1)51. Fixed Parameterized Algorithm for Vertex Cover     http://www.sciencedirect.com/science/article/pii/S002001909700213552. Rabin-Karp

TypeError: list indices must be integers or slices, not str报错解决及原理_程序员托马斯的博客-程序员秘密

今天遇到这个报错TypeError: list indices must be integers or slices, not str这里的提示意思是list的索引必须是整数或者片,而不是str一开始代码写的是仔细观看数据列表里套字典 字典里面再套字典 列表里的字典是要有多个的 为了区分是哪个 所以取的时候要加字典数据的位置索引0,1之类再加key值 就可以取出想要的数据了...

【Unity Shaders】抖音变身漫画 2_linda012518的博客-程序员秘密

此篇文章只讨论图像处理部分,AI换脸暂不讨论。上图左边手机拍摄效果,右图是自己通过算法实现。不同角度和亮度,不同参数的效果对比。提亮图像由于不同手机或图片的亮度信息不同,这里咱们先加了亮度调整,但是又不能平均加亮,这样会导至图片丢失很多细节,所以选择非线性提亮。for(int i = 0; i < _Light; i++){ col = pow(col, (1 - col/3.0));}非线性提亮方法有很多,大家下载工程后可自行发挥。减少图像般色级别...

pycharm error——attempted relative import beyond top-level package_pycharm pytorch attempted relative import_lanlan_bupt的博客-程序员秘密

pycharm导入上级目录的文件问题导入上级目录报错:attempted relative import beyond top-level package目录结构:我要在textcnn文件里面导入bidmysql的类,两个类不在同一个包下面,普通导入方式报错from ..model import bidmysql#这样报错attempted relative im...

随便推点

vue中this.$nextTick()的相关讲解(Demo详解)_辰兮要努力的博客-程序员秘密

【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!吾等采石之人,应怀大教堂之心,愿你们奔赴在各自的热爱中…文章目录一、序言二、案例一、序言本篇一起了解一下this.$nextTick 相关方法this.$nextTick 将回调延迟到.

petalinux zynq7000从安装到PS加载PL bin文件_zynq linux 加载bit_同年纪_的博客-程序员秘密

1.安装vivado 2019.1,安装petalinux 2019.1。其他版本同理,去DocNav下看UG1144,找到对应版本支持的linux系统。Ubuntu Linux Workstation/Server 16.04.5, 16.04.6, 18.04.1,18.04.02 (64-bit)2.vmware安装ubuntu 16.04虚拟机,安装VM ware tools,以便...

Linux C程序的预处理、编译、汇编、链接及运行过程_呦呦是只喵的博客-程序员秘密

Linux C程序的预处理、编译、汇编、链接及运行过程Hello Word 程序直接编译运行过程预处理编译汇编链接运行Hello Word 程序直接编译运行过程在Linux系统下,任意目录内创建一个简单的C程序,命名为hello.c,其代码如下: 1 #include <stdio.h> 2 int main(){ 3 //这里有个注释 4 printf("...

常用音频数据库记录_weixin_33834628的博客-程序员秘密

记录一下常用的数据库。TIMIT也忘记当时从哪下的了,网上也没看到好一点的链接。TIMIT全称The DARPA TIMIT Acoustic-Phonetic Continuous Speech Corpus, 是由德州仪器(TI)、麻省理工学院(MIT)和坦福研究院(SRI)合作构建的声学-音素连续语音语料库。TIMIT数据集的语音采样频率为16kHz,一共包含6300个句子,由来自美...

LINQ语句查询_sql 英文库 linq中查询中文_DWL718的博客-程序员秘密

连接数据库Linq语句查询,目前的学习进度来说也就是我们的单表和多表查询它为匿名类型查询提供了一种很方便的方法,可用来将一组只读属性封装到单个对象中,而且还不需要先定义一个显示类型,因为它的类型名字直接由编译器生成,而且每一个属性的类型都是由编译器推断我们先试一下如何用linq语句查询Var匿名类型的关键字,是定义数据类型的间接方式首先我们用中文来理解一下怎么去查询比如你要查询某个学院有什么专业Var??(??代表一个量)=from?? InmyModel专业(在数据库.

最短路径Floyd算法讲解_Think_Idea的博客-程序员秘密

如果需要求出每两点之间的最短路,不必调用n次Dijkstra(边权均为正)或者Bellman-ford(有负权)。有一种跟简单的实现算法-Floyd-Warshall算法代码如下:void Floyd(){ for(int k=1;k<=n;k++) for(int i=1;i<=n;++i) for(int j=1;j<=n;++j){

推荐文章

热门文章

相关标签