接着上一篇博文:制作自己的数据集
在制作好我们自己的LMDB格式的数据集后,我们就可以依照前面mnist的例程来对LeNet模型进行训练啦,有木有很激动(≧▽≦)/ (虽然现在对模型而是一片懵懂)
简单的说下步骤:
- 从caffe root/exmples/mnist文件夹中复制过来我需要的solver.prototxt和train_test.prototxt文件,将其重命名为my_solver.prototxt my_train_test.prototxt文件,并修改其中需要修改的参数
- 进行训练
1 solver.prototxt和train_test.prototxt文件,修改其中的参数
先看下train_test.prototxt文件,这个文件是LeNet的模型配置文件,里面有输入层、卷积层、池化层和全连层的定义,在这里我们只需要对输入层中的两个位置进行修改。
还有一个问题就是,在输出的时候,由于LeNet是对10个字符进行输出的,也就是10类,这里我分的是3类,不知道不修改的有没有影响,和群里的同学交流也说碰到了这种情况,但是好像不影响。此处是个问题,还得继续研究
name: "LeNet"
layer {
name: "mnist"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
scale: 0.00390625
}
data_param {
source: "myfile/build_lmdb/train_lmdb" //需要修改路径
batch_size: 64
backend: LMDB
}
}
layer {
name: "mnist"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
transform_param {
scale: 0.00390625
}
data_param {
source: "myfile/build_lmdb/val_lmdb" //需要修改路径
batch_size: 100
backend: LMDB
}
}
再看下solver.prototxt文件,其中:
1. net的路径需要修改为自己的
2. snapshot_prefix的路径是生成的模型放在哪里
3. solver_mode: CPU 选择CPU模式
4. 其余的就根据自己的需要调整参数
# The train/test net protocol buffer definition
net: "myfile/build_lmdb/my_train_test.prototxt"
# test_iter specifies how many forward passes the test should carry out.
# In the case of MNIST, we have test batch size 100 and 100 test iterations,
# covering the full 10,000 testing images.
test_iter: 2
# Carry out testing every 500 training iterations.
test_interval: 5
# The base learning rate, momentum and the weight decay of the network.
base_lr: 0.01
momentum: 0.9
weight_decay: 0.0005
# The learning rate policy
lr_policy: "inv"
gamma: 0.0001
power: 0.75
# Display every 100 iterations
display: 2
# The maximum number of iterations
max_iter: 80
# snapshot intermediate results
snapshot: 150
snapshot_prefix: "myfile/build_lmdb/"
# solver mode: CPU or GPU
solver_mode: CPU
使用下面的train_mynet.sh文件来训练LeNet模型,将其中的 –solver后面改成自己的路径
#!/usr/bin/env sh
set -e
./build/tools/caffe train --solver=myfile/build_lmdb/my_solver.prototxt $@
2 进行训练
在Linux终端下输入下面的代码进行训练
CD caffe
./examples/mnist/train_mynet.sh
可以看到在40次的时候,accuracy就为1了,网络应该是训练成功了,但是此时训练的模型可能并不是最好的,因为还有过拟合,样本小的影响等
接下来就是要对训练好的模型,进行使用,下次接着实验,先吃饭~