CIFAR-10模型训练与可视化

来源:互联网 发布:坚持做某件事 知乎 编辑:程序博客网 时间:2024/04/29 09:14
通过caffe深度学习框架在cifar10数据集训练得到模型,观察并分析模型的train loss 、test loss及accuracy曲线,并对得到的caffemodel进行测试。

数据集介绍:cifar-10是一个使用非常广泛的物体识别图像数据集,CIFAR-10数据中包含了60000张32×32的彩色图像,其中训练集50000张,测试集10000张。共有10类物体,分别是airplane,automobile,bird,cat,deer,dog,frog,horse,ship,truck。


图1 CIFAR-10数据部分示例图片
实验环境:Ubuntu14.04+caffe+gtx960+cuda7.5

网络模型
(1)下载数据集

首先需要从CIFAR-10网站上下载数据集并将图片转为lmdb格式以及计算二进制格式均值,caffe框架中的example中已包含相应的文件,依次执行即可。caffe对于训练数据格式,支持lmdb、h5py等等,其中lmdb数据格式常用于单标签数据,像分类等,经常使用lmdb的数据格式。对于回归等问题,或者多标签数据,一般使用h5py数据的格式。此外,将图片减去均值再进行训练和测试,可以提高速度和精度。

cd $CAFFE_ROOT./data/cifar10/get_cifar10.sh./examples/cifar10/create_cifar10.sh

(2)模型
CIFAR-10是典型的卷积神经网络结构,包含相应的卷积层,池化层,修正线性单元以及最顶层带有分类器的归一化采样层。在cifar10_quick_train_test.prototxt中可以看到相应的网络结构设置,下图是网络结构的可视化示意图。


图2 CIFAR-10 CNN Model网络结构可视化示意图


(3)训练模型
在.prototxt文件里面定义了网络的结构,输入cifar10的lmdb文件,通过softmax函数计算损失与准确率。在solver.prototxt文件里定义了训练的各种参数。最后运行train_quick.sh文件,即可获得训练结果。可以在terminal中看到训练过程中loss参数以及迭代次数等信息。最后训练的结果保存在cifar10_quick_iter_5000中。

图3 模型训练过程中显示信息
可以看到,在训练过程中,每次迭代里,lr表示的是learning rate,loss为training function。在测试部分,score 0表示accuracy,score 1便是testing loss function。
4.python接口模型训练及可视化显示
下面使用caffe的python接口进行分类并可视化显示,绘制loss以及accuracy曲线。这里采用的是jupyter notebook来进行曲线绘制。
在这里使用cifar10_full_train_test.prototxt中的网络结构模型
迭代次数niter = 40000


图4 训练过程有关数据显示

图5 loss与accuracy曲线
5.使用模型分类新数据
训练完成后我们得到模型:
cifar10_quick_iter_4000.caffemodel.h5
cifar10_quick_iter_4000.solverstate.h5



下面是测试使用的deploy模型结构图

图6 模型结构图



下面是测试使用的图片,为一张马的图片。

图7 测试图片


下面是分类结果以及对应标签的概率。
分类结果:

对应标签的概率:




0 0
原创粉丝点击