CNN网络参数
卷积神经网络 LeNet-5各层参数详解
LeNet论文阅读:LeNet结构以及参数个数计算

LeNet-5共有7层,不包含输入,每层都包含可训练参数;每个层有多个Feature Map,每个FeatureMap通过一种卷积滤波器提取输入的一种特征,然后每个FeatureMap有多个神经元。
1. C1层是一个卷积层
输入图片:32*32
卷积核大小:5*5
卷积核种类:6
输出featuremap大小:28*28 (32-5+1)
神经元数量:28*28*6
可训练参数:(5*5+1)*6(其中5x5对应kernel size,+1为bias,6为feature map 数目)
连接数:(5*5+1)*6*28*28 (卷积核大小(每个格子一个参数)+bias)*卷积核种类*输出featureMap大小
2. S2层是一个下采样层
输入:28*28
采样区域:2*2
采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid
采样种类:6
输出featureMap大小:14*14(28/2)
神经元数量:14*14*6
可训练参数:2*6(和的权+bias) (因为LeNet-5采用的sigmoid(a*average(x)+b)作为池化函数)
连接数:(2*2+1)*6*14*14 (采样区域(每个格子一个参数)+bias)*卷积核种类*输出featureMap大小
一个filter对应下面一个通道
S2中每个特征图的大小是C1中特征图大小的1/4
3. C3层也是一个卷积层
输入:S2中所有6个或者几个特征map组合
卷积核大小:5*5
卷积核种类:16
输出featureMap大小:10*10
C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合
存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。
则:可训练参数:6*(3*25+1)+6*(4*25+1)+3*(4*25+1)+(25*6+1)=1516
括号内部为kernel_size x kernel_size x feature_map_num + bias_num,表示从feature_map_size卷积得到的feature map所需要的参数个数;括号外为相应得到feature map的数目。
连接数:10*10*1516=151600 其中1516为参数个数,10为新生成的feature map的size。
4. S4层是一个下采样层
输入:10*10
采样区域:2*2
采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid
采样种类:16
输出featureMap大小:5*5(10/2)
神经元数量:5*5*16=400
可训练参数:2*16=32(和的权+bias)
连接数:16*(2*2+1)*5*5=2000
S4中每个特征图的大小是C3中特征图大小的1/4
5. C5层是一个卷积层
输入:S4层的全部16个单元特征map(与s4全相连)
卷积核大小:5*5
卷积核种类:120
输出featureMap大小:1*1(5-5+1)
可训练参数/连接:120*(16*5*5+1)=48120
链接个数等于参数个数,因为新生成feature map的size为1
6. F6层全连接层
输入:c5 120维向量
计算方式:计算输入向量和权重向量之间的点积,再加上一个bias,结果通过sigmoid函数
可训练参数:84*(120+1)=10164
AlexNet层级分析
由作者的原文可知,AlexNet模型在训练时使用了两个GPU,所以就出现了一些参数为两个GPU共享,一些参数是GPU独享。在建立此训练模型前,先分析各层的参数关系。
AlexNet模型共有5个卷积层,3个全连接层,前两个卷积层和第五个卷积层有pool池化层,其他两个卷积层没有池化。
第一卷积层:
由AlexNet架构图,第一卷积层的卷积核有96个(两个GPU各用48个),卷积核的尺度为11*11*3(3为RGB通道数),步长stride为4。生成的卷积特征图单元数为55*55*48*2,每个特征图尺度为55*55,由此可知输入图像尺度为227*227(55(单向尺度)*4(步长) + (11(卷积核尺度)-4(步长)) = 227)。因此输入图像单元数为227*227*3*1。
第一池化层:
输入单个特征图尺度为55*55,池化尺度3*3,步长为2,输出池化特征图尺度为27*27((55(单向尺度)-3(池化尺度))/2(步长)+1 = 27)。特征图单元数为27*27*48*2.
第二卷积层:
由AlexNet架构图,卷积核有256个(两个GPU各128个,同时各作用于各GPU内的第一池化层的输出),卷积核尺度5*5*3,步长为1,生成卷积特征图单元数为27*27*128*2,每个特征图尺度为27*27,由此计算输入特征图尺度为31*31(27(单向尺度)*1(步长)+(5(卷积核尺度)-1(步长))= 31)。因此输入特征图单元数为31*31*96。
第二池化层:
输入单个特征图尺度为27*27,池化尺度3*3,步长为2,输出池化特征图尺度为13*13((27(单向尺度)-3(池化尺度))/2(步长)+ 1 = 13)。特征图单元数为13*13*128*2.
第三卷积层:
由AlexNet架构图,卷积核有384个(两个GPU各192个,同时需要共享各自GPU第二池化层的输出),卷积核尺度为3*3*3,步长为1,生成卷积特征图单元数为13*13*192*2,每个特征图尺度为13*13,由此计算输入特征图尺度为15*15(13(单向尺度)*1(步长)+(3(卷积核尺度)-1(步长))=15)。因此输入特征图单元数为15*15*256。
第四卷积层:
由AlexNet架构图,卷积核有384个(两个GPU各192个,同时不共享各自GPU内的第三卷积层输出),卷积核尺度为3*3*3,步长为1,生成卷积特征图单元数为13*13*192*2,每个特征图尺度为13*13,由此计算输入特征图尺度为15*15(13(单向尺度)*1(步长)+(3(卷积核尺度)-1(步长))=15)。因此输入特征图单元数为15*15*384。
第五卷积层:
由AlexNet架构图,卷积核有256个(两个GPU各128个,同时不共享各自GPU内的第四卷积层输出),卷积核尺度为3*3*3,步长为1,生成卷积特征图单元数为13*13*128*2,每个特征图尺度为13*13,由此计算输入特征图尺度为15*15(13(单向尺度)*1(步长)+(3(卷积核尺度)-1(步长))=15)。因此输入特征图单元数为15*15*384。
第五池化层:
输入单个特征图尺度13*13,池化尺度3*3,步长为2,输出池化特征图尺度为6*6((13(单向尺度)-3(池化尺度))/2(步长)+1 = 6)。特征图单元数为6*6*256.
第一全连接层:
输入特征图单元数为6*6*256,输出特征图单元数为4096,全连接参数个数为6*6*256*4096.
第二全连接层:
输入特征图单元数4096,输出特征图单元数为4096,全连接参数个数为4096*4096.
第三全连接层:
即输出层,输入特征图单元数为4096,输出特征图单元数为1000,全连接参数个数为4096*1000.
经典CNN模型计算量与内存需求分析
表1 CNN经典模型的内存,计算量和参数数量对比
AlexNet |
VGG16 |
Inception-v3 |
|
模型内存(MB) |
>200 |
>500 |
90-100 |
参数(百万) |
60 |
138 |
23.2 |
计算量(百万) |
720 |
15300 |
5000 |
1. CNN模型具体分析(以AlexNet网络模型为例)
1.1 网络结构
图1 AlexNet网络结构
AlexNet有5个卷积层和3个全连接层
C1:96×11×11×3 (卷积核个数/宽/高/深度) 34848个
C2:256×5×5×48(卷积核个数/宽/高/深度) 307200个
C3:384×3×3×256(卷积核个数/宽/高/深度) 884736个
C4:384×3×3×192(卷积核个数/宽/高/深度) 663552个
C5:256×3×3×192(卷积核个数/宽/高/深度) 442368个
R1:4096×6×6×256(卷积核个数/宽/高/深度) 37748736个
R2:4096×4096 16777216个
R3:4096×1000 4096000个
共6000万个参数
1.2 AlexNet模型内存大小计算
6000万(个参数)×32位(float32)=19.2亿位≈228.88MB
1.3 AlexNet模型计算力消耗
图2 AlexNet模型每层每秒浮点运算次数及参数数量
1.4 AlexNet网络模型配置
AlexNet网络模型获得了2012年ImageNet比赛的冠军。AlexNet使用两块GTX580显卡进行训练,两块GPU各训练网络的一部分,在第二个卷积层和全连接层两块GPU之间才进行互相通信。
CNN网络参数的更多相关文章
- AI:IPPR的数学表示-CNN结构/参数分析
前言:CNN迎接多类的挑战 特定类型的传统PR方法特征提取的方法是固定的,模式函数的形式是固定的,在理论上产生了特定的"局限性" 的,分类准确度可以使用PAC学习理论的方法计算出来 ...
- CNN网络介绍与实践:王者荣耀英雄图片识别
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者介绍:高成才,腾讯Android开发工程师,2016.4月校招加入腾讯,主要负责企鹅电竞推流SDK.企鹅电竞APP的功能开发和技术优化工作 ...
- 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络Vgg
上周我们讲了经典CNN网络AlexNet对图像分类的效果,2014年,在AlexNet出来的两年后,牛津大学提出了Vgg网络,并在ILSVRC 2014中的classification项目的比赛中取得 ...
- 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络AlexNet
上周我们用PaddlePaddle和Tensorflow实现了图像分类,分别用自己手写的一个简单的CNN网络simple_cnn和LeNet-5的CNN网络识别cifar-10数据集.在上周的实验表现 ...
- CNN超参数优化和可视化技巧详解
https://zhuanlan.zhihu.com/p/27905191 在深度学习中,有许多不同的深度网络结构,包括卷积神经网络(CNN或convnet).长短期记忆网络(LSTM)和生成对抗网络 ...
- 深度学习方法(七):最新SqueezeNet 模型详解,CNN模型参数降低50倍,压缩461倍!
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 继续前面关于深度学习CNN经典模型的 ...
- 积神经网络(CNN)的参数优化方法
http://www.cnblogs.com/bonelee/p/8528863.html 积神经网络的参数优化方法——调整网络结构是关键!!!你只需不停增加层,直到测试误差不再减少. 积神经网络(C ...
- 数据挖掘入门系列教程(十一点五)之CNN网络介绍
在前面的两篇博客中,我们介绍了DNN(深度神经网络)并使用keras实现了一个简单的DNN.在这篇博客中将介绍CNN(卷积神经网络),然后在下一篇博客中将使用keras构建一个简单的CNN,对cifa ...
- 数据挖掘入门系列教程(十二)之使用keras构建CNN网络识别CIFAR10
简介 在上一篇博客:数据挖掘入门系列教程(十一点五)之CNN网络介绍中,介绍了CNN的工作原理和工作流程,在这一篇博客,将具体的使用代码来说明如何使用keras构建一个CNN网络来对CIFAR-10数 ...
随机推荐
- JavaScript--变量和运算符
JavaScript--变量和运算符 一.心得 JavaScript语法:变量声明 var弱类型 var中可以是任何类型在JavaScript里面,单&单|是位运算符.变量没有值使用的话就是u ...
- mysql数据库的备份及免密码上传
主要利用了mysqldump和sshpass进行备份和免密上传 以下是代码实现: #!/bin/bash #该脚本放在主服务器运行 #从服务器账号密码ipremotehost="xxxxxx ...
- Arrays.copyof(···)与System.arraycopy(···)区别
首先观察先System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)的声明: public stati ...
- chrome插件访问原始页面的变量
开发chrome插件时遇到需要获取原始网页中的一个js变量的值问题.由于content.js和原始网页的作用域环境不同,无法直接获取变量的值,提示undefined.谷歌找到大神提供的办法.综合起来记 ...
- C++的const类成员函数
转自:http://blog.csdn.net/lihao21/article/details/8634876 我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编 ...
- UVA-11248 Frequency Hopping (最大流+最小割)
题目大意:给一张网络,问是否存在一条恰为C的流.若不存在,那是否存在一条弧,使得改动这条弧的容量后能恰有为C的流? 题目分析:先找出最大流,如果最大流不比C小,那么一定存在一条恰为C的流.否则,找出最 ...
- qt忙等与非忙等
非忙等: void delay(int msec) { QTime end = QTime::currentTime().addMSecs(msec); while( QTime::currentTi ...
- SGU 138. Games of Chess 构造 难度:2
138. Games of Chess time limit per test: 0.25 sec. memory limit per test: 4096 KB N friends gathered ...
- Jenkins插件开发(二)-- HelloWorld
在上一篇blog中我们讲了如何搭建jenkins插件的开发环境,接下来介绍如何开发我们的插件. 创建HelloWorld插件 学习每门新语言的时候,我们都会写一个HelloWorld程序,这里介绍的是 ...
- Julia 语言的一些尝试
前些天发现了Julia 这门编程语言后便决定对其进行一些尝试,便写了下面的小程序,也算是看看这门语言所谓的速度快到底是怎么快法. 整数累加: x= function fff() : global x ...