LetNet5网络结构详解

LetNet5

在这里插入图片描述
这个是其网络结构。
下面我们详细介绍该网络结构,在此之前,先约定一些称呼:feature maps(f.maps)是每层网络的特征图;stride是卷积核的步长;C1层的特征图大小为28×28×6,其中28×28表示特征图的高度×宽度,6表示特征图的通道数;该层使用的卷积核大小5×5×1×6,表示高度×宽度×输入通道数×输出通道数。
首先是输入层,输入图像大小统一归一化为32×32,在正式输入网络之前,其灰度值也要进行归一化。
第一个卷积层C1
其经过大小为5×5×1×6的卷积核(stride=1),生成特征图为28×28×6,不使用填充,步长为1。输入的图像是一个单通道的图像,因此,特征图的数量就等于卷积核的数量,每个输出通道都与一个输入通道相连。C1层包含了5×5×1×6+6=156个可训练的参数,以及28×28×6=4704个节点,每个节点都是经过一个5×5的卷积和一个偏置项计算所得到的,连接数为5×5+1=26个,所以C1层一共有4704×26=122304个连接。
池化层S2
其首先对C1层输出中的2×2相邻的区域求和,再取平均值,然后乘以一个权值和加上一个偏置值,将结果通过Sigmoid函数进行映射。这是一个2×2的采样核,stride=2,生成特征图为14×14×6。注意,这里的池化层虽然没有卷积核,但有训练参数。其包括6×2=12个训练参数,分别是求和的权重和偏移量,共(4+1)×6×14×14=5880个连接。早期的LeNet5使用平均池化,后来使用最大池化。
卷积层C3
经过大小为5×5×6×16的卷积核(stride=1),其生成特征图为10×10×16。其输入是6个通道,输出是16个通道,这里经过了一个编码,
C3层的前6个特征图与S2层相邻的3个特征图相连,接下来的6个特征图与S2层相邻的4个特征图相连,再接下来的3个特征图与S2层部分不相邻的4个特征图相连,最后一个特征图与S2层的所有特征图相连。这其实是一个非常主观的设定,输出的16个通道并没有与输入的每个通道相连。它的设计初衷有两个:第一是减小计算量;第二是打破对称性。实际上,在后来的网络设计中,很少会遵循这样的设计准则。
可以求出C3层有6×(5×5×3+1)+9×(5×5×4+1)+1×(5×5×6+1)=1516个参数,与S2层的连接一共有10×10×1516=151600个。
池化层S4
其经过2×2的采样核(stride=2),生成特征图为5×5×16。S4层有32个可训练参数、2000个连接。S4层的池化方式与S2层相同,输入是10×10×16,输出是5×5×16。S4层一共有16×2=32个参数,与C3层一共有(4+1)×5×5×16=2000个连接。
卷积层C5
它由120个5×5的卷积核组成,每个卷积核都与S4层中每个大小为5×5的特征图进行卷积,所以每个C5层的卷积核都会输出一个1×1的结果,有点类似于全局平均池化和全连接层,但C5层是一个卷积层而不是一个全连接层,如果这个LeNet5网络的输入变得更大而其他保持不变,那么这个输出将大于1×1。C5层与S4层共有120×(5×5×16+1)=48120个连接。
全连接层F6
它的输入为1×1×120,输出为1×1×84,总参数量为120×84。F6层有84×(120+1)=10164个可训练的连接,84这个数字有当时的设计背景,与ASCII码表示的7×12的位图大小相等。F6层将输入向量与权重向量求点积,然后加上偏置项,用Sigmoid函数产生输出。
输出全连接层
其输入为1×1×84,输出为1×1×10,总参数量为84×10个,其中10就是分类的类别数。输出层是由欧式径向基函数(RBF)组成的。每个输出对应一个RBF,每个RBF都有84维的输入向量。每个RBF都有一个输出,最后输出层会输出一个10维的向量。
注意,虽然是分类任务,但这里并没有采用现在广泛使用的Softmax损失,即交叉熵,而采用了一个欧式距离,称为Gaussian Connection,其等价于一个全连接层加上一个欧式损失层。
LeNet5是早期非常经典的卷积神经网络,也是网络成功商业化的代表,但它的输入图像太小,加上数据不足,在早期并没有在除手写数字识别之外的其他计算机视觉任务上取得大的突破。

摘录于《深度学习之模型设计》

LeNet-5神经网络 C源代码,这个写的比较好,可以用gcc编译去跑,结合理论可以对深度学习有更深刻的了解 介绍 根据YANN LECUN的论文《Gradient-based Learning Applied To Document Recognition》设计的LeNet-5神经网络,C语言写成,不依赖任何第三方库。 MNIST手写字符集初代训练识别率97%,多代训练识别率98%。 DEMO main.c文件为MNIST数据集的识别DEMO,直接编译即可运行,训练集60000张,测试集10000张。 项目环境 该项目为VISUAL STUDIO 2015项目,用VISUAL STUDIO 2015 UPDATE1及以上直接打开即可编译。采用ANSI C编写,因此源码无须修改即可在其它平台上编译。 如果因缺少openmp无法编译,请将lenet.c中的#include和#pragma omp parallel for删除掉即可。 API #####批量训练 lenet: LeNet5的权值的指针,LeNet5神经网络的核心 inputs: 要训练的多个图片对应unsigned char二维数组的数组,指向的二维数组的batchSize倍大小内存空间指针。在MNIST测试DEMO中二维数组为28x28,每个二维数组数值分别为对应位置图像像素灰度值 resMat:结果向量矩阵 labels:要训练的多个图片分别对应的标签数组。大小为batchSize batchSize:批量训练输入图像(二维数组)的数量 void TrainBatch(LeNet5 *lenet, image *inputs, const char(*resMat)[OUTPUT],uint8 *labels, int batchSize); #####单个训练 lenet: LeNet5的权值的指针,LeNet5神经网络的核心 input: 要训练的图片对应二维数组 resMat:结果向量矩阵 label: 要训练的图片对应的标签 void Train(LeNet5 *lenet, image input, const char(*resMat)[OUTPUT],uint8 label); #####预测 lenet: LeNet5的权值的指针,LeNet5神经网络的核心 input: 输入的图像的数据 labels: 结果向量矩阵指针 count: 结果向量个数 return 返回值为预测的结果 int Predict(LeNet5 *lenet, image input, const char(*labels)[LAYER6], int count); #####初始化 lenet: LeNet5的权值的指针,LeNet5神经网络的核心
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值