手记

LeNet简介以及Caffe实现

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


上图是LeNet网络模型框架,总共有8层,C层代表卷积层,S层代表下采样层。

模型理解:

第一层:输入层图像大小是32*32(Caffe中Mnist数据库为28*28)。

第二层:C1层是卷积层,卷积核大小为5*5,总共有6个卷积核,通过卷积操作得到6个特征图(feature map),每个feature map有(32-5+1)*(32-5+1),即28*28个神经元。每个神经元都与输入图像的5*5大小区域相连,所以总共有28*28*(5*5+1)=122304个连接。参数个数=(5*5+1)*6=156个。通过卷积运算,使原信号特征增强,并且降低噪音,而且不同的卷积核能够提取到图像中的不同特征。

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

第四层:C3也是一个卷积层,运用5*5卷积核处理S2层,C3feature map的神经元个数为10*10,。C3有16个feature map,每个feature map由上一层的各feature map之间的不同组合。下图是组合情况:


C3层的第0个feature map是由S2层的第0、1、2个feature map组合得到的,以此类推。C3层的训练参数个数=(5*5*3+1)*6+(5*5*4+1)*9+(5*5*6+1)*1=1516。连接数151600。

第五、第六层不解释了。

第七层:F6全连接层有84个feature map,每个feature map只有一个神经元与C5层全相连。

第八层:输出层也是全连接层,共有10个节点,分别代表数字0到9。

Caffe环境LeNet模型:

以下的所有操作都假设你已经安装好了Caffe,并且完成了compile。

第一步:数据下载

在caffe根目录下执行./data/mnist/get_mnist.sh脚本,执行成功后,会得到四个文件,下面是部分截图


第二部:将数据mnist data转化为caffe可用的lmdb格式文件

成功解压缩下载的样本库后,然后执行./example/mnist/creat_mnist.sh,注意,一定要在caffe的根目录下执行,不然就会提示creat_mnist.sh not fount。执行成功后,会得到mnist_test_lmdb和mnist_train_lmdb两个文件。


第三步:网络配置

LeNet的网络配置在./example/mnist/lenet_train_test.prototxt文件中,只需要注意source参数文件路径,其他参数不需要修改。可以执行:sudo gedit ./example/mnist/lenet_train_test.prototxt打开这个文件看一下source默认的路径和你保存的路径是否相同,根据情况更改。

第四步:训练网络

运行./example/mnist/train_lenet.sh,执行此脚本,实际运行的是lenet_solver.prototxt中的定义,部分截图如下。


数据训练结束后,会生成lenet_iter_10000.caffemodel、lenet_iter_10000.solverstate、iter_5000.caffemodel和lenet_iter_5000.solverstate四个文件。

原文出处

0人推荐
随时随地看视频
慕课网APP