当前位置: 首页 > 文档资料 > Caffe 学习笔记 >

MNIST

优质
小牛编辑
121浏览
2023-12-01

LeNet 是一个用来识别手写数字的最经典的卷积神经网络,是Yann LeCun在1998年设计并提出的,是早期卷积神经网络中最有代表性的试验系统之一,其论文是CNN领域的第一篇经典之作。

lecun-98

LeNet 网络模型框架

分层介绍

LeNet-5 包含输入层在内公有8层,每一层都包含多个参数(权重)。

  • C 层代表卷积层,通过卷积操作,可以使原信号特征增强,并降低噪音。
  • S 层是一个下采样层,利用图像局部相关性的原理,对图像进行子抽样,可以减少数据处理量,同时也可保留一定有用信息。

第1层

输入层是32x32大小的图像(Caffe中Mnist数据库为28x28),这样做的原因是希望潜在的明显特征,如笔画断续、角点能够出现在最高层特征监测子感受野的中心。

第2层

C1层是卷积层,6个feature map,5x5大小的卷积核,每个feature map大小为(32-5+1)x(32-5+1) = 28x28个神经元,每个神经元都与输入层的5x5大小的区域相连,故C1层共有(5x5+1)x6=156个训练参数,两层之间的连接数(5x5+1)x(28x28)x6=122304个。通过卷积运算,使原信号特征增强,并且降低噪音,不同的卷积核能够提取到图像中的不同特征。

第3层

S2层是一个下采样层,有6个14x14的feature map,每个feature map中的每个神经元都与都与C1层对应的feature map中的2x2区域相连。S2层中的每个神经元是由这4个输入相加,乘以一个训练参数,再加上feature map的偏置参数,结果通过sigmoid函数计算而得。S2的每一个feature map有14x14个神经元,参数个数为2x6=12个,连接数为(2x2+1)x(14x14)x6=5880个连接。下采样层的目的是为了降低网络训练参数及模型的过拟合度。下采样层的池化方式通常有两种:

  • max pooling
  • average pooling

第4层

C3层是卷积层,卷积核为5x5,神经元个数为(14-5+1)x(14-5+1)=10x10=100,有6个feature map,每个feature map由上一层S2的各feature map互相组合而成。

可以计算出:

  • 训练参数个数:(5x5x3+1)x6+(5x5x4+1)x9+(5x5x6+1)x1=1516
  • 连接数:训练参数个数x(10x10)=151600

第5层

S4 层是下采样层,由16个5x5大小的feature map构成,每个神经元与C3中对应的feature map的2x2大小的区域相连。

  • 参数个数:2x16=32
  • 连接数:(2x2+1)x(5x5)x16=2000

第6层

C5层是卷积层,使用5x5的卷积核,每个feature map有(5-5+1)x(5-5+1)=1x1=1个神经元,每个单元都与S4层的全部16个feature map的5x5区域全相连。

  • 参数个数:(5x5x16+1)x120=48120
  • 连接数:(5x5x16+1)x120=48120

第7层

F6层是全连接层,有84个feature map,每个feature map只有一个神经元与C5层全连接

  • 参数个数:(1x1x120+1)x84=10164
  • 连接数:(1x1x120+1)x84=10164.

第8层

这层是输出层,也是全连接层,共有10个节点,分别代表数字0到9,如果节点i的值是0,则网络识别的结果是数字i。

  • 参数个数:(1x1x84)x10=840
  • 连接数:(1x1x84)x10=840

采用的是径向基函数(RBF)的网络连接方式,RBF 的值由i的比特图编码确定,越接近 0,则越接近i的比特图编码,表示当前网络输入的识别结果是字符i。

下载MNIST数据集

  • cd data/mnist
  • ./get_mnist.sh

转换格式

下载到的原始数据集为二进制文件,需要转换为LEVELDB或者LMDB才能被caffe识别。

./examples/mnist/create_mnist.sh

训练超参数

使用caffe工具,指定-solver参数(指定求解器文本文件名):

./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt

最终训练的模型权值保存在 examples/mnist/lenet_iter_10000 caffemodel 文件中,训练状态保存在examples/mnist/lenet_iter_10000.solverstate文件中,它们都是ProtoBuffer二进制格式文件。

使用训练好的模型进行预测

./build/tools/caffe test -model examples/mnist/lenet_train_test.prototxt -weights 
examples/mnist/lenet_iter_10000.caffemodel -iterations 100