首先,我們的資料集分為訓練集和測試集,訓練集中含有將近2000個資料文件(在這個文件中將乙個32*32的向量圖),故為了在計算機中進行處理,我們需要先開啟檔案,迴圈讀出檔案前32行,並將每行的頭32個字元值儲存在numpy陣列中,最後返回陣列,**如下:
defimg2vector(filename):
returnvect=zeros((1,1024))
fr=open(filename)
for i in range(32):
linestr=fr.readline()
for j in range(32):
returnvect[0,32*i+j]=int(linestr[j])
return returnvect
實現這一步後,我們只需在實現測試**即可
defhandwritingclasstest():
hwlabels=
trainingfilelist=os.listdir('
trainingdigits
')#get 1
trainingfilelist
m=len(trainingfilelist)
m trainingmat=zeros((m,1024))
for i in
range(m):
filenamestr=trainingfilelist[i]
filestr=filenamestr.split('.'
)[0]
classnumstr=int(filestr.split('_'
)[0])
trainingmat[i,:]=img2vector('
trainingdigits/%s
' %filenamestr)
testfilelist=os.listdir('
testdigits')
errorcount=0.0mtest=len(testfilelist)
for i in
range(mtest):
filenamestr=testfilelist[i]
filestr=filenamestr.split('.'
)[0]
classnumstr=int(filestr.split('_'
)[0])
vectorundertest=img2vector('
testdigits/%s
' %filenamestr)
classifierresult=classify0(vectorundertest,trainingmat,hwlabels,3)
"the classifier came back with:%d,the real answer is:%d
" %(classifierresult,classnumstr)
if(classifierresult!=classnumstr):errorcount+=1.0
"\nthe total number of errors is:%d
" %errorcount
"\nthe total error rate od:%f:
" %(errorcount/float(mtest))
結束
手寫字元識別
個人認為,主要原因在於資料的收集較為困難,合成的方式不是很適合手寫字元的生成。第二,手寫字元存在過分和粘連等各種情況,但是現階段的技術而言,只要資料足夠,可以採用lstm ctc的方式去解決,不單獨獲取單個字元,而是直接採用行識別。手寫字元識別要想使用到產品中,關鍵還是要找好具體的業務點,比如,個人...
基於K 近鄰演算法的手寫字元識別
收集資料集,包括trainingdigits和testdigits資料夾,資料夾下是字元影象的二進位制文字檔案,大小為32 32,如下圖所示 首先介紹listdir,它能返回資料夾路徑下的所有子檔案 import os from os import listdir listdir r c users...
開源標準資料集 mnist(手寫字元識別)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!可以看出,mnist.pkl.gz 分為訓練集,校驗集和測試集 training data,valid data,test data load data training data,valid data,test data 均是二元 tuple t...