caffe模型(1):LeNet模型讲解

引言:

LeNet作为入门级caffe网络模型,是用来识别手写数字的最经典的卷积神经网络,Yann LeCun于1998年设计提出,手写数字识别系统LeNet-5在20世纪90年代广泛应用于银行手写数字识别。

1.模型简介

        如图所示,LeNet-5卷积神经网络整体框架较小,包含了卷积层、池化层、全连接层。包含输入输出层在内一共8层,每一层包含多个参数(权重),C层为卷积层,通过卷积操作对原始数据信号进行增强,降低噪音,S层是下采样层,利用图像局部相关原理,对图像进行子抽样,减少数据处理量,保留有用信息。

2.模型详解

LeNet网络模型具体结构如下:

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

第二层:C1层为一卷积层,含有6个特征图像(feature map),卷积核大小为5*5,因此每个特征图形有(32-5+1)*(32-5+1)个神经元,每个神经元都与输入层的5*5的区域相连,因此C1层含有(5*5+1)*6=156个训练参数,两层之间的连接数为156*(28*28)=122304个。卷积运算使得原始信号增强,降低噪音,不同的卷积核能够提取图像不同的特征。

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

第四层:C3层也是一个卷积层,运用5*5的卷积核,处理S2层,计算C3的特征图神经元个数为(14-5+1)*(14-5+1),即10*10。C3层有16个特征图形,每个特征图由上一层的各特征图之间的不同组合。(此句费解,下表或可理解)

 

C3层特征图的情形组合如上图所示,其中第0个特征图由S2层的第0、1、2个特征图组合而成,第一个特征图由S2层的1、2、3个特征图组合得到,以此类推。

计算出C3层的训练参数个数:(5*5*3+1)*6+(5*5*4+1)*9+(5*5*6+1)*1=1516,因此有151600个连接。

第五层:S4层是一个下采样层,由16个5*5大小的特征图构成,每个神经元与C3中对应的特征图的2*2大小的区域相连,同理,可以计算出2*16=32个参数和2000个连接。

第六层:C5层又是一个卷积层,使用5*5的卷积核,因此每个特征图像含有(5-5+1)*(5-5+1)个神经元,每个单元都与S4层的全部16个特征图的5*5区域全相连,C5层共有120个特征图,其参数与连接数都为48120个。

第七层:F6全连接层由84个特征图组成,每个特征图只有一个神经元与C5层全相连,因此有(1*1*120+1)*84=10164个参数和连接,F6层计算输入向量和权重的点积与偏置,之后传递给sigmoid函数来计算神经元。

第八层:输出层也是全连接层,共有十个节点,分别代表了数字0-9,如果节点i的值为0,则网络识别的结果是数字i,采用的是径向基函数(RBF)的连接方式,其中输出的计算方式为:y_{i}=\sum{x(j)-w(ij)}**2,RBF的值由i的比特图编码决定,越接近于0,则越接近于i的比特图编码,表示当前网络输入的字符越接近字符i,该层由84*10个设定的参数与连接。

3.caffe实现

caffe安装包自带minst的实例,目录:~/caffe/examples/minst

1.数据下载:获取minst数据集,需在caffe根目录下执行./data/minst/get_minst.sh

#!/usr/bin/env sh
# This scripts downloads the mnist data and unzips it.

DIR="$( cd "$(dirname "$0")" ; pwd -P )"
cd "$DIR"

echo "Downloading..."

for fname in train-images-idx3-ubyte train-labels-idx1-ubyte t10k-images-idx3-ubyte t10k-labels-idx1-ubyte
do
    if [ ! -e $fname ]; then
        wget --no-check-certificate http://yann.lecun.com/exdb/mnist/${fname}.gz
        gunzip ${fname}.gz
    fi
done

下载完成后一共四个文件:

2.生成lmdb,样本库解压缩后,执行./example/minst/creat_minst.sh即可

脚本使用caffe中的convert_minst_data.bin工具,将minst data转化为caffe可用的lmdb格式文件,生成minst-train-lmdb和minst-test-lmdb两个文件在minst目录下。

#!/usr/bin/env sh
# This script converts the mnist data into lmdb/leveldb format,
# depending on the value assigned to $BACKEND.
set -e

EXAMPLE=examples/mnist
DATA=data/mnist
BUILD=build/examples/mnist

BACKEND="lmdb"

echo "Creating ${BACKEND}..."

rm -rf $EXAMPLE/mnist_train_${BACKEND}
rm -rf $EXAMPLE/mnist_test_${BACKEND}

$BUILD/convert_mnist_data.bin $DATA/train-images-idx3-ubyte \
  $DATA/train-labels-idx1-ubyte $EXAMPLE/mnist_train_${BACKEND} --backend=${BACKEND}
$BUILD/convert_mnist_data.bin $DATA/t10k-images-idx3-ubyte \
  $DATA/t10k-labels-idx1-ubyte $EXAMPLE/mnist_test_${BACKEND} --backend=${BACKEND}

echo "Done."

 3.网络配置,LeNet网络定义在./examples/minst/lenet_train_test.prototxt。只需将source参数文件(lmdb数据路径+绝对值路径)路径修改好,以及分类数目定义好。

4.训练网络:运行./example/minst/train_lenet.sh,实际运行的是脚本中的lenet_solver.prototxt.

5.测试网络。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值