卷积神经网络 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网络参数的更多相关文章

  1. AI:IPPR的数学表示-CNN结构/参数分析

    前言:CNN迎接多类的挑战 特定类型的传统PR方法特征提取的方法是固定的,模式函数的形式是固定的,在理论上产生了特定的"局限性" 的,分类准确度可以使用PAC学习理论的方法计算出来 ...

  2. CNN网络介绍与实践:王者荣耀英雄图片识别

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者介绍:高成才,腾讯Android开发工程师,2016.4月校招加入腾讯,主要负责企鹅电竞推流SDK.企鹅电竞APP的功能开发和技术优化工作 ...

  3. 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络Vgg

    上周我们讲了经典CNN网络AlexNet对图像分类的效果,2014年,在AlexNet出来的两年后,牛津大学提出了Vgg网络,并在ILSVRC 2014中的classification项目的比赛中取得 ...

  4. 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络AlexNet

    上周我们用PaddlePaddle和Tensorflow实现了图像分类,分别用自己手写的一个简单的CNN网络simple_cnn和LeNet-5的CNN网络识别cifar-10数据集.在上周的实验表现 ...

  5. CNN超参数优化和可视化技巧详解

    https://zhuanlan.zhihu.com/p/27905191 在深度学习中,有许多不同的深度网络结构,包括卷积神经网络(CNN或convnet).长短期记忆网络(LSTM)和生成对抗网络 ...

  6. 深度学习方法(七):最新SqueezeNet 模型详解,CNN模型参数降低50倍,压缩461倍!

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 继续前面关于深度学习CNN经典模型的 ...

  7. 积神经网络(CNN)的参数优化方法

    http://www.cnblogs.com/bonelee/p/8528863.html 积神经网络的参数优化方法——调整网络结构是关键!!!你只需不停增加层,直到测试误差不再减少. 积神经网络(C ...

  8. 数据挖掘入门系列教程(十一点五)之CNN网络介绍

    在前面的两篇博客中,我们介绍了DNN(深度神经网络)并使用keras实现了一个简单的DNN.在这篇博客中将介绍CNN(卷积神经网络),然后在下一篇博客中将使用keras构建一个简单的CNN,对cifa ...

  9. 数据挖掘入门系列教程(十二)之使用keras构建CNN网络识别CIFAR10

    简介 在上一篇博客:数据挖掘入门系列教程(十一点五)之CNN网络介绍中,介绍了CNN的工作原理和工作流程,在这一篇博客,将具体的使用代码来说明如何使用keras构建一个CNN网络来对CIFAR-10数 ...

随机推荐

  1. js将 HTML 页面生成 PDF 并下载

    最近碰到个需求,需要把当前页面生成 pdf,并下载.弄了几天,自己整理整理,记录下来,我觉得应该会有人需要 :) 先来科普两个插件: html2Canvas 简介 我们可以直接在浏览器端使用html2 ...

  2. CF 920

    t1 随便乱搞 t2 随便乱搞 然后wa了三发,QAQ t3 随便乱搞 t4 邻接表+堆 对进出进行一个统计 然后时间到了...

  3. [转载]java调用本地dos命令

    在社区看到java调用本地dos命令的代码,特贴出来 String command = "ipconfig"; Runtime run = Runtime.getRuntime() ...

  4. TR-069: ACS Discovery

    ACS Discovery 原文链接:http://www.qacafe.com/knowledgebase/tr-069-training-series-acs-discovery/ In TR-0 ...

  5. myeclipse单步调试

    如何进行myclipse的单步调式与跟踪?希望大虾们详细点,多谢. 打断点,然后运行,进debug试图,按F6执行一行,按F5是钻进去执行 追问 朋友,能详细点吗? 本人是初学 回答 如图 如若成功请 ...

  6. 用 Python 快速实现 HTTP 和 FTP 服务器

      用 Python 快速实现 HTTP 服务器 有时你需临时搭建一个简单的 Web Server,但你又不想去安装 Apache.Nginx 等这类功能较复杂的 HTTP 服务程序时.这时可以使用  ...

  7. BZOJ3212: Pku3468 A Simple Problem with Integers(线段树)

    3212: Pku3468 A Simple Problem with Integers Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2530  So ...

  8. 7-17 Hashing(25 分)

    The task of this problem is simple: insert a sequence of distinct positive integers into a hash tabl ...

  9. Nodejs中npm install 命令的问题

    在使用nodejs的npm包管理工具中碰到过许多个坑,在网上查了很久才解决,现在加以总结. 两种安装方式(本地安装,全局安装) 1.全局安装(npm install -g moduleName/npm ...

  10. (简单)冒泡和直接选择排序同时调用swap算法

    void swap(int &a , int &b) { int temp; temp = a; a=b; b=temp; } void bubble(int a[],int n) { ...