1. 程式人生 > >【Kaggel】Digit Recognizer——使用caffe model

【Kaggel】Digit Recognizer——使用caffe model

一、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