《人工智能導論》實驗2 多層感知機(MLP)手寫數字識別_第1頁
《人工智能導論》實驗2 多層感知機(MLP)手寫數字識別_第2頁
《人工智能導論》實驗2 多層感知機(MLP)手寫數字識別_第3頁
《人工智能導論》實驗2 多層感知機(MLP)手寫數字識別_第4頁
《人工智能導論》實驗2 多層感知機(MLP)手寫數字識別_第5頁
全文預覽已結束

下載本文檔

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

文檔簡介

實驗2多層感知機(MLP)手寫數字識別一、實驗目的及要求掌握使用scikit-learn構建多層感知機(MLP)分類器的方法。理解圖像數據預處理流程:尺寸統一、像素歸一化、展平與標簽編碼。掌握MLP的核心超參數:隱藏層結構、激活函數、優化器、學習率、迭代次數、早停等。能夠繪制訓練/驗證損失曲線,識別過擬合與欠擬合現象。理解全連接神經網絡處理圖像時的局限:參數量大、忽略空間結構。二、實驗學時3學時(建議時間分配:講解15分鐘,任務實踐130分鐘,總結報告15分鐘)三、實驗前準備軟件環境:Python3.8及以上,建議使用JupyterNotebook或VSCode。依賴庫:NumPy、Matplotlib、scikit-learn。安裝命令如下:pipinstallnumpymatplotlibscikit-learn知識儲備:已學習教材第5.3節(前饋神經網絡與MLP)內容。數據準備:實驗使用scikit-learn內置的load_digits手寫數字數據集(8×8像素,1797張),無需聯網下載;課后可嘗試替換為MNIST數據集。在JupyterNotebook中運行繪圖代碼前,建議先執行`%matplotlibinline`,以保證圖像正常顯示。四、實驗任務任務1加載與預處理手寫數字數據(20分鐘)使用sklearn.datasets.load_digits加載手寫數字數據集;將像素值除以16進行歸一化;數據集本身已是展平的64維向量;將標簽轉換為整數類型。任務2劃分訓練集與測試集(10分鐘)按8:2劃分訓練集與測試集。任務3構建與訓練MLP模型(40分鐘)使用MLPClassifier構建一個具有兩個隱藏層的網絡(128→64),選擇ReLU激活函數和Adam優化器。任務4模型評估與可視化(30分鐘)計算測試集準確率、繪制混淆矩陣;隨機抽取若干測試樣本,對比真實標簽與預測結果;可視化部分預測錯誤的8×8樣本。任務5超參數對比實驗(30分鐘)分別改變隱藏層大小、激活函數、學習率等超參數,觀察對訓練過程和最終準確率的影響,填寫對比表。參考代碼以下為完整可運行代碼。完整訓練通常只需數秒到十幾秒,請耐心等待:#實驗七:多層感知機(MLP)手寫數字識別

importwarnings

warnings.filterwarnings('ignore')

importnumpyasnp

importmatplotlib.pyplotasplt

fromsklearn.datasetsimportload_digits

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.neural_networkimportMLPClassifier

fromsklearn.metricsimportaccuracy_score,confusion_matrix,classification_report

#設置中文字體

plt.rcParams['font.sans-serif']=['SimHei','MicrosoftYaHei','ArialUnicodeMS']

plt.rcParams['axes.unicode_minus']=False

#1.加載手寫數字數據集(load_digits為scikit-learn內置數據集,無需聯網)

print("正在加載手寫數字數據集...")

digits=load_digits()

X=digits.data.astype('float64')/16.0#像素值范圍0-16,歸一化到[0,1]

y=digits.target

print(f"樣本數:{X.shape[0]},特征維度:{X.shape[1]},類別數:{len(np.unique(y))}")

#2.劃分訓練集與測試集

X_train,X_test,y_train,y_test=train_test_split(

X,y,test_size=0.2,random_state=42,stratify=y

)

print(f"訓練樣本數:{X_train.shape[0]},測試樣本數:{X_test.shape[0]}")

#3.構建MLP模型

mlp=MLPClassifier(

hidden_layer_sizes=(128,64),

activation='relu',

solver='adam',

learning_rate_init=0.001,

max_iter=30,

early_stopping=False,

random_state=42,

verbose=True

)

print("\n開始訓練MLP...")

mlp.fit(X_train,y_train)

#4.評估

y_pred=mlp.predict(X_test)

acc=accuracy_score(y_test,y_pred)

print(f"\n測試集準確率:{acc:.4f}")

print("\n分類報告:")

print(classification_report(y_test,y_pred))

#5.繪制訓練損失曲線

plt.figure(figsize=(12,5))

plt.subplot(1,2,1)

plt.plot(mlp.loss_curve_,label='訓練損失')

plt.xlabel('迭代輪次')

plt.ylabel('損失')

plt.title('MLP訓練過程')

plt.legend()

plt.grid(True)

plt.subplot(1,2,2)

cm=confusion_matrix(y_test,y_pred)

plt.imshow(cm,cmap='Blues')

plt.colorbar()

plt.xlabel('預測標簽')

plt.ylabel('真實標簽')

plt.title('混淆矩陣')

plt.show()

#6.可視化預測錯誤的樣本

errors=np.where(y_pred!=y_test)[0]

print(f"預測錯誤樣本數:{len(errors)}")

plt.figure(figsize=(10,4))

fori,idxinenumerate(np.random.choice(errors,min(8,len(errors)),replace=False)):

plt.subplot(2,4,i+1)

plt.imshow(X_test[idx].reshape(8,8),cmap='gray')

plt.title(f"真實:{y_test[idx]},預測:{y_pred[idx]}")

plt.axis('off')

plt.suptitle('部分預測錯誤的樣本')

plt.tight_layout()

plt.show()預期結果(參考)在1,437條訓練樣本上訓練30個epoch,測試集準確率通常可達0.96–0.98。訓練損失曲線應持續下降;若準確率仍不高,可適當增加epoch或增大網絡規模。混淆矩陣主對角線顏色最深,說明大多數樣本被正確分類;錯誤樣本多為字形相近的數字(如4與9、3與8)。超參數對比表請在下表中填寫不同超參數組合下的結果:超參數組合訓練時間測試準確率觀察與結論hidden=(256,128),relu,adam基線模型hidden=(128,64),relu,adam網絡容量減小hidden=(256,128),tanh,adam更換激活函數hidden=(256,128),relu,sgd更換優化器learning_rate_init=0.01學習率增大五、實驗重點、難點重點:MLP的構建流程、圖像數據歸一化與展平、訓練/驗證損失曲線的解讀。難點:理解隱藏層數量與神經元數量對模型容量的影響;識別過擬合與欠擬合;理解全連接網絡處理圖像時參數量過大的問題。六、操作要點本實驗使用scikit-learn內置的load_digits數據集,無需聯網下載;課后可嘗試替換為MNIST等更大規模數據集。為控制訓練時間,課堂演示時可直接使用全部1,437條訓練樣本;課后可嘗試更大規模的手寫數字數據。建議記錄每次實驗的運行時間和最終準確率,便于超參數對比。若出現內存不足,可減少訓練樣本量或縮小隱藏層規模。七、注意事項MLP將圖像展平為向量,丟失了像素間的空間關系,因此參數量大且對平移、旋轉的魯棒性較弱。訓練神經網絡需要一定時間,不要在課堂上臨時安裝大型依賴包。測試集只能用于最終評估,不能用于選擇模型或調整超參數。早停法使用驗證集

溫馨提示

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

評論

0/150

提交評論