一、Kaggel简介
Kaggel是一个主要为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台。Digit Recognizer是平台上的一个简单的练习项目。
二、Digit Recognizer介绍
题目大意是做一个手写数字识别的分类任务,所给的数据有sample_submission.csv,test.csv和train.csv。sample_submission.csv给出了提交文件的例子(参考其格式),test.csv给出了需要进行分类的测试数据,train.csv给出了带有标签的训练数据。数据是28*28的图像,在提供的数据文件中以一个1*784的一维向量表示,csv文件中一行代表一张图片的向量表示。train.csv中每行开头有附加的一个标签,表示这张图片中写的数字。
三、caffe model测试
用caffe+mnist数据集训练模型。采用训练了10000次的模型,网络使用Lenet,在准备好网络文件,模型文件和测试数据的csv文件之后,用python程序将数据处理后放入模型,得出结果并储存为标准格式。
代码如下:
import numpy as np
import pandas as pd
import sys
caffe_root = '/home/xionghao/caffe/' #caffe的根目录
sys.path.insert(0, caffe_root + 'python')
import caffe
caffe.set_mode_cpu()
#设置网络配置文件和模型文件
model_def = '/home/xionghao/caffe/examples/kaggle/lenet.prototxt'
model_weights = '/home/xionghao/caffe/examples/kaggle/lenet_iter_10000.caffemodel'
#初始化网络
net = caffe.Net(model_def,model_weights,caffe.TEST)
#读取测试数据
test=pd.read_csv('/home/xionghao/caffe/examples/kaggle/test.csv').values
n=np.shape(test)[0]
testId = range(1, n+1)
testLabel=[]
for i in xrange(n):
#归一化
input=test[i,:]/255.0
#将1*784的向量调整为28*28的矩阵
input=input.reshape((1,1,28,28))
#输入数据
net.blobs['data'].data[...] = input
#前向传播一次,从返回的prob中选取最大可能性的分类
output = net.forward()['prob'][0].argmax()
testLabel.append(output)
print output
dataframe = pd.DataFrame({'ImageId': testId, 'Label': testLabel})
dataframe.to_csv("submissions.csv", index=False)
四、上传结果
将生成的submissions.csv提交,最后准确率为0.99800。
程序打包:https://github.com/MBXH/Kaggle_Digit_Recognizer_ByCaffeModel.git