原文:http://blog.youkuaiyun.com/liumaolincycle/article/details/47258937 caffe示例实现之1在CIFAR-10数据集上训练与测试Caffe
下面假定caffe的根目录是CAFFE_ROOT,在终端输入命令下载数据集:
- 1
- 2
- 3
3.模型
CIFAR-10的卷积神经网络模型由卷积层,pooling层,ReLU,非线性变换层,局部对比归一化线性分类器组成。该模型定义在CAFFE_ROOT/examples/cifar10/cifar10_quick_train_test.prototxt
中。
4.训练和测试“quick”模型
(注:如果电脑没有GPU,需要更改两个地方,即cifar10_quick_solver.prototxt和cifar10_quick_solver_lr1.prototxt。将其中最后一行的GPU改为CPU。(文件在caffe/examples/cifar10下))
写好网络定义和solver以后,开始训练模型。输入下面的命令:
- 1
- 2
可以看到每一层的详细信息、连接关系及输出的形式,方便调试。
初始化后开始训练:
在solver的设置中,每100次迭代会输出一次训练损失,测试是500次迭代输出一次:
训练阶段,lr是学习率,loss是训练函数。测试阶段,score 0是准确率,score 1是损失函数。最后的结果:
测试准确率大约有0.75,模型参数存储在二进制protobuf格式的文件cifar10_quick_iter_5000
中。
参考CAFFE_ROOT/examples/cifar10/cifar10_quick.prototxt
的模型定义,就可以训练其他数据了。
5.GPU使用
CIFAR-10比较小,可以用GPU训练,当然也可以用CPU训练。为了比较CPU和GPU的训练速度,通过修改cifar*solver.prototxt
中的一行代码来实现。
- 1
- 2
6.”full”模型
同理可以训练full模型,full模型比quick模型迭代次数多,一共迭代70000次,前60000次学习率是0.001,中间5000次学习率是0.0001,最后5000次学习率是0.00001。full模型的网络层数也比quick模型多。
命令是:
- 1
- 2
测试准确率也比quick模型高,大约有0.82。
三.利用classification.bin识别单张图片 注:每一行的反斜杠之前都有一个空格
回到根目录下(caffe目录下 cd caffe)执行:
$ ./build/examples/cpp_classification/classification.bin \
>examples/cifar10/cifar10_quick.prototxt \ (模型描述文件)
>examples/cifar10/cifar10_quick_iter_5000.caffemodel.h5 \ (训练好的caffemodel模型权值文件)
>examples/cifar10/mean.binaryproto \ (图像均值文件)
>data/cifar/batches.meta.txt \ (图像类别标签信息) 注:此标签可能是11类,因为最后一行有一个空格,需要删掉,否则和模型描述文件不符。
>examples/images/fish-bike.jpg (此处可以是自己的图片)