Python機器學習項目化教程(微課視頻版)課件 第15章 綜合案例:手寫數(shù)字識別_第1頁
Python機器學習項目化教程(微課視頻版)課件 第15章 綜合案例:手寫數(shù)字識別_第2頁
Python機器學習項目化教程(微課視頻版)課件 第15章 綜合案例:手寫數(shù)字識別_第3頁
Python機器學習項目化教程(微課視頻版)課件 第15章 綜合案例:手寫數(shù)字識別_第4頁
Python機器學習項目化教程(微課視頻版)課件 第15章 綜合案例:手寫數(shù)字識別_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第15章綜合案例分析:手寫數(shù)字識別目錄CONTENTS15.1

圖像的存儲表示15.2數(shù)據(jù)預處理15.3基于kNN的手寫數(shù)字識別15.5本章小結15.4基于神經(jīng)網(wǎng)絡的手寫數(shù)字識別15.1圖像的存儲表示學習基礎學習認知能力信息素養(yǎng)高常見的圖像分類有3種:彩色圖像、灰度圖像和二值圖像。其中,對于彩色圖像,每個像素通常是由紅(R)、綠(G)、藍(B)三個分量來表示,每個分量的取值范圍為(0,255)。一幅完整的圖像可以被分割為藍(B分量)、綠(G分量)、紅(R分量)三基色的單色圖,如圖15-1所示。15.1圖像的存儲表示灰度圖像(GrayImage)是每個像素只有一個采樣顏色的圖像,即每個像素只有一個分量表示該像素的灰度值。在一個灰度圖中,每個像素位置(x0,y0)對應一個灰度值,圖像在計算機中存儲為數(shù)值矩陣。像素的表示如圖15-3所示。15.1圖像的存儲表示高度為24像素、寬度為16像素的數(shù)字“8”的灰度圖像在計算機中的存儲形式如圖15-4所示。15.1圖像的存儲表示數(shù)字“8”的二值圖像在計算機中的存儲表示如圖15-5所示。15.2數(shù)據(jù)預處理15.2.1將圖像轉(zhuǎn)換為文本這樣的命名方式是為了方便提取出樣本的真實標簽。樣本中手寫數(shù)字0~9的存儲形式如圖12-6所示。手寫數(shù)字“5”經(jīng)過降噪處理,轉(zhuǎn)換為0和1二值化數(shù)據(jù)后如圖15-7所示。15.2數(shù)據(jù)預處理15.2.2將矩陣轉(zhuǎn)換為向量前面已經(jīng)把數(shù)字圖像格式的文件轉(zhuǎn)換為一個32×32的二進制像素矩陣文本文件,為了提取樣本特征,還需要將每一個32×32的二進制像素矩陣轉(zhuǎn)換為1×1024的向量。defdata_to_array(file_name):arr=[]f=open(file_name)foriinrange(0,32):line_data=f.readline()forjinrange(0,32):arr.append(int(line_data[j]))returnarr15.3基于kNN的手寫數(shù)字識別15.3.2kNN分類模型分別將訓練樣本和測試樣本中的數(shù)據(jù)轉(zhuǎn)換為1×1024的向量,并獲得訓練樣本特征集合train_X、測試樣本特征集合test_X_set、訓練樣本真實標簽集合train_y、測試樣本真實標簽集合true_y_set,然后利用kNN算法依次統(tǒng)計每一個測試樣本其近鄰樣本中每一類樣本的個數(shù),確定該測試樣本的標簽,即測試樣本預測標簽pre_y,得到所有測試樣本的預測標簽集合pre_y_set。15.3基于kNN的手寫數(shù)字識別15.3.3kNN分類模型評估根據(jù)kNN算法得到的測試樣本預測標簽和真實標簽,計算分類的準確率。foriinrange(0,len(test_files)):print("真正數(shù)字:"+true_y_set[i]+""+"測試結果為:{}".format(pre_y_set[i]))ifpre_y_set[i]==(int)(true_y_set[i]):count=count+1accuracy=count/len(test_files)print("accuracy=",accuracy*100,"%")15.3基于kNN的手寫數(shù)字識別直接使用kNN模塊進行手寫數(shù)字識別knn=KNeighborsClassifier(n_neighbors=2,weights='distance')knn.fit(train_X,train_y)predict_y=knn.predict(test_X_set)print(predict_y)true_y=np.array(list(map(int,true_y_set)))print(np.array(list(map(int,true_y_set))))acc=accuracy_score(predict_y,true_y)print("KNN準確率:",acc)15.4基于神經(jīng)網(wǎng)絡的手寫數(shù)字識別15.4.1定義神經(jīng)網(wǎng)絡模型定義輸入層到輸出層的權值為W1,隱藏層到輸出層的權值為W2,初始時,隨機初始化權值W1和W2。W1=np.random.random((1024,50))-0.5W2=np.random.random((50,10))-0.515.4基于神經(jīng)網(wǎng)絡的手寫數(shù)字識別BP神經(jīng)網(wǎng)絡訓練模型deftrain(X_train,y_train,X_test,y_test,iter=10000,lr=0.08):W1=np.random.random((1024,50))-0.5W2=np.random.random((50,10))-0.5foritinrange(iter):k=np.random.randint(X_train.shape[0])X_data=X_train[k]X_data=np.atleast_2d(X_data)L1=sigmoid(np.dot(X_data,W1))L2=sigmoid(np.dot(L1,W2)L2_delta=(y_train[k]-L2)*dsigmoid(np.dot(L1,W2))L1_delta=np.dot(L2_delta,W2.T)*dsigmoid(np.dot(X_data,W1))

15.4基于神經(jīng)網(wǎng)絡的手寫數(shù)字識別手寫數(shù)字識別運行結果:15.5本章小結手寫數(shù)字識別是一個圖像處理問題,要想識別圖像中的手寫數(shù)字,需要先將圖像信息轉(zhuǎn)換為文

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論