【Kaggel】Digit Recognizer——使用caffe model
阿新 • • 發佈:2019-01-11
一、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。