Caffe安装包自带mnist的例子。测试步骤如下
1.数据下载
获得mnist的数据包,在caffe的根目录下执行./date/mnist/get_mnist.sh脚本
2.生成LMDB
执行./example/mnist/create_mnist.sh。将mnist date 转化成caffe可用的lmdb格式文件。
3. 定义MNIST Network
3.1 写Data Layer
目前我们从之前创立的lmdb中读取MNIST data,该数据层定义为
layers {
name: "mnist"
type: DATA //输入层的类型为date层
data_param {
source: "mnist_train_lmdb"
backend: LMDB
batch_size: 64 //一次训练64条数据
scale: 0.00390625 //输入图像归一到【0.1】,1除以256为0.00390625
}
top: "data"
top: "label"
}
3.2 写Convolution Layer
定义地一层convolution layer:
layers {
name: "conv1" //卷积层名称
tyoe: CONVOLUTION
blobs_lr: 1. //权重参数w的学习率倍数
blobs_lr: 2. //偏置参数b的学习率倍数
convolution_param {
num_output: 20 //输出单元数20
kernelsize: 5 //卷积核大小为5*5
stride: 1 //步长为1
weight_filler {
type: "xavier" //使用xavier算法自动确定基于输入输出神经元数量的初始规模
}
bias_filler {
type: "constant" //偏置值初始化为常数,默认为0
}
}
bottom: "data"
top: "conv1"
}
3.3 写Pooling Layer
layers {
name: "pool1"
type: POOLING
pooling_param {
kernel_size: 2 //pooling核为2*2
stride: 2
pool: MAX //pooling的方式为MAX
}
bottom: "conv1"
top: "pool1"
}
类似地,你还可以定义第二个covolution和pooling layers, 具体可参考
/examples/mnist/lenet_train_test.prototxt
3.4 写Fully connected Layer
layers {
name: "ip1"
type: INNER_PRODUCT //层类型为全连接层
blobs_lr: 1.
blobs_lr: 2.
inner_product_param { //全连接层的参数
num_output: 500 //输出500个节点
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
bottom: "pool2"
top: "ip1"
}
3.5 写ReLU Layer
layers {
name: "relu1"
type: RELU
bottom: "ip1"
top: "ip1"
}
在ReLU layer之后,我们可以写另一个innerproduct layer:
layers {
name: "ip2"
type: INNER_PRODUCT
blobs_lr: 1.
blobs_lr: 2.
inner_product_param {
num_output: 10 //输出10个单元
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
bottom: "ip1"
top: "ip2"
}
3.6 写Loss Layer
最后写loss
layers { //loss层,SOFTMAX_LOSS层实现softmax和多项logistics损失
name: “loss”
type: SOFTMAX_LOSS
bottom: "ip2"
bottom: "label"
}
4. 训练网络 运行./example/mnist/train_lenet.sh
5. 测试网络 运行./example/mnist/test_lenet.sh
测试数据中的accruacy的平均成功率0.99