一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python MNIST手寫體識別詳解與試練

Python MNIST手寫體識別詳解與試練

2022-02-25 00:28mind_programmonkey Python

MNIST(官方網站)是非常有名的手寫體數字識別數據集,在Tensorflow的官方網站里,第一個就拿它來做實戰講解,咱們也以此作為開始的項目

【人工智能項目】MNIST手寫體識別實驗及分析:

Python MNIST手寫體識別詳解與試練

 

1.實驗內容簡述

1.1 實驗環境

本實驗采用的軟硬件實驗環境如表所示:

Python MNIST手寫體識別詳解與試練

在Windows操作系統下,采用基于Tensorflow的Keras的深度學習框架,對MNIST進行訓練和測試。

采用keras的深度學習框架,keras是一個專為簡單的神經網絡組裝而設計的Python庫,具有大量預先包裝的網絡類型,包括二維和三維風格的卷積網絡、短期和長期的網絡以及更廣泛的一般網絡。使用keras構建網絡是直接的,keras在其Api設計中使用的語義是面向層次的,網絡組建相對直觀,所以本次選用Keras人工智能框架,其專注于用戶友好,模塊化和可擴展性。

1.2 MNIST數據集介紹

MNIST(官方網站)是非常有名的手寫體數字識別數據集。它由手寫體數字的圖片和相對應的標簽組成,如:

Python MNIST手寫體識別詳解與試練

MNIST數據集分為訓練圖像和測試圖像。訓練圖像60000張,測試圖像10000張,每一個圖片代表0-9中的一個數字,且圖片大小均為28*28的矩陣。

  • train-images-idx3-ubyte.gz: training set images (9912422 bytes) 訓練圖片
  • train-labels-idx1-ubyte.gz: training set labels (28881 bytes) 訓練標簽
  • t10k-images-idx3-ubyte.gz: test set images (1648877 bytes) 測試圖片
  • t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes) 測試標簽

1.3 數據預處理

數據預處理階段對圖像進行歸一化處理,我們將圖片中的這些值縮小到 0 到 1 之間,然后將其饋送到神經網絡模型。為此,將圖像組件的數據類型從整數轉換為浮點數,然后除以 255。這樣更容易訓練,以下是預處理圖像的函數:務必要以相同的方式對訓練集和測試集進行預處理:

之后對標簽進行one-hot編碼處理:將離散特征的取值擴展到了歐式空間,離散特征的某個取值就對應歐式空間的某個點;機器學習算法中,特征之間距離的計算或相似度的常用計算方法都是基于歐式空間的;將離散型特征使用one-hot編碼,會讓特征之間的距離計算更加合理

 

2.實驗核心代碼

(1)MLP感知器

# Build MLP
model = Sequential()

model.add(Dense(units=256,
              input_dim=784,
              kernel_initializer='normal',
              activation='relu'))
model.add(Dense(units=128,
              kernel_initializer='normal',
              activation='relu'))
model.add(Dense(units=64,
              kernel_initializer='normal',
              activation='relu'))
model.add(Dense(units=10,
              kernel_initializer='normal',
              activation='softmax'))

model.summary()

(2)CNN卷積神經網絡

# Build LeNet-5
model = Sequential()
model.add(Conv2D(filters=6, kernel_size=(5, 5), padding='valid', input_shape=(28, 28, 1), activation='relu')) # C1
model.add(MaxPooling2D(pool_size=(2, 2))) # S2
model.add(Conv2D(filters=16, kernel_size=(5, 5), padding='valid', activation='relu')) # C3
model.add(MaxPooling2D(pool_size=(2, 2))) # S4
model.add(Flatten())
model.add(Dense(120, activation='tanh')) # C5
model.add(Dense(84, activation='tanh')) # F6
model.add(Dense(10, activation='softmax')) # output
model.summary()

模型解釋

模型訓練過程中,我們用到LENET-5的卷積神經網絡結構。

Python MNIST手寫體識別詳解與試練

第一層,卷積層

這一層的輸入是原始的圖像像素,LeNet-5 模型接受的輸入層大小是28x28x1。第一卷積層的過濾器的尺寸是5x5,深度(卷積核種類)為6,不使用全0填充,步長為1。因為沒有使用全0填充,所以這一層的輸出的尺寸為32-5+1=28,深度為6。這一層卷積層參數個數是5x5x1x6+6=156個參數(可訓練參數),其中6個為偏置項參數。因為下一層的節點矩陣有有28x28x6=4704個節點(神經元數量),每個節點和5x5=25個當前層節點相連,所以本層卷積層總共有28x28x6x(5x5+1)個連接。

第二層,池化層

這一層的輸入是第一層的輸出,是一個28x28x6=4704的節點矩陣。本層采用的過濾器為2x2的大小,長和寬的步長均為2,所以本層的輸出矩陣大小為14x14x6。原始的LeNet-5 模型中使用的過濾器和這里將用到的過濾器有些許的差別,這里不過多介紹。

第三層,卷積層

本層的輸入矩陣大小為14x14x6,使用的過濾器大小為5x5,深度為16。本層不使用全0填充,步長為1。本層的輸出矩陣大小為10x10x16。按照標準卷積層本層應該有5x5x6x16+16=2416個參數(可訓練參數),10x10x16x(5x5+1)=41600個連接。

第四層,池化層

本層的輸入矩陣大小是10x10x16,采用的過濾器大小是2x2,步長為2,本層的輸出矩陣大小為5x5x16。

第五層,全連接層

本層的輸入矩陣大小為5x5x16。如果將此矩陣中的節點拉成一個向量,那么這就和全連接層的輸入一樣了。本層的輸出節點個數為120,總共有5x5x16x120+120=48120個參數。

第六層,全連接層

本層的輸入節點個數為120個,輸出節點個數為84個,總共參數為120x84+84=10164個。

第七層,全連接層

LeNet-5 模型中最后一層輸出層的結構和全連接層的結構有區別,但這里我們用全連接層近似的表示。本層的輸入節點為84個,輸出節點個數為10個,總共有參數84x10+10=850個。

模型過程

初始參數設定好之后開始訓練,每次訓練需要微調參數以得到更好的訓練結果,經過多次嘗試,最終設定參數為:

  • 優化器:adam優化器
  • 訓練輪數:10
  • 每次輸入的數據量:500

LENET-5的卷積神經網絡對MNIST數據集進行訓練,并采用上述的模型參數,進行10輪訓練,在訓練集上達到了95%的準確率

Python MNIST手寫體識別詳解與試練

 

3.結果分析機器總結

3.1 模型測試以及結果分析

為了驗證模型的魯棒性,在上述最優參數下保存在驗證集上性能最好的模型,在測試集上進行最終的測試,得到最終的準確率為:95.13%.

為了更好的分析我們的結果,這里用混淆矩陣來評估我們的模型性能。在模型評估之前,先學習一些指標。

TP(True Positive):將正類預測為正類數,真實為0,預測也為0FN(False Negative):將正類預測為負類數,真實為0,預測為1FP(False Positive):將負類預測為正類數, 真實為1,預測為0。TN(True Negative):將負類預測為負類數,真實為1,預測也為1混淆矩陣定義及表示含義:

混淆矩陣是機器學習中總結分類模型預測結果的情形分析表,以矩陣形式將數據集中的記錄按照真實的類別與分類模型預測的類別判斷兩個標準進行匯總。其中矩陣的行表示真實值,矩陣的列表示預測值,下面以本次案例為例,看下矩陣表現形式,如下:

Python MNIST手寫體識別詳解與試練

Python MNIST手寫體識別詳解與試練

3.2 結果對比

并與四層全連接層模型進行對比,全連接層的模型結構如下:

Python MNIST手寫體識別詳解與試練

其結果如下:

Python MNIST手寫體識別詳解與試練

Python MNIST手寫體識別詳解與試練

總之,從結果上來看,最后經過不斷地參數調優最終訓練出了一個分類正確率在95%左右的模型,并且通過實驗證明了模型具有很強的魯棒性。

3.3 模型的預測

對單張圖像進行預測:

Python MNIST手寫體識別詳解與試練

 

4 總結

本文通過對卷積神經網絡的研究流程分析,提出了一套完整的卷積神經網絡MNIST手寫體識別流程并也將本文的數據集分類正確率提高到95%的水平;其次,本文構建的模型是具有普適性的,可以稍加改進就應用于不同的數據集進行特征提取及分類。再次,本文在構建模型的過程中綜合考慮了計算資源和時間成本,構建的卷積神經網絡模型在普通的個人筆記本上即可進行訓練,此外還增加了MLP感知器作為對比,從結果中看出卷積神經網絡效果更好。綜合以上幾點來看,本文的研究具有現實可應用性,具有可推廣性,因而具有較高的實用價值!

Python MNIST手寫體識別詳解與試練

到此這篇關于Python MNIST手寫體識別詳解與試練的文章就介紹到這了,更多相關Python 手寫體識別內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/Mind_programmonkey/article/details/121049552

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99精品在线 | 成人久久久 | 四虎影视在线观看2413 | 网站视频免费 | 欧美亚洲国产精品久久第一页 | 全黄h全肉细节文在线观看 全彩成人18h漫画 | 国产成人看片免费视频观看 | 日本69av | 国产里番| 午夜伦理:伦理片 | 四虎影在线永久免费观看 | 91美女在线视频 | 国产一卡二卡3卡4卡四卡在线视频 | 国产色在线观看 | 校园春色自拍偷拍 | 亚洲欧美久久久久久久久久爽网站 | haodiaose在线精品免费观看 | 久久伊人影院 | 日韩一区二三区无 | 韩国最新理论片奇忧影院 | 成人影院在线观看免费 | 全日本爽视频在线 | 日韩欧美推理片免费在线播放 | 免费在线观看视频 | 特级毛片免费视频观看 | 久久99国产综合精品AV蜜桃 | 精品国产综合 | 日韩精品一区二区三区中文字幕 | 2021国产麻豆剧传媒新片 | 国产精品全国探花在线观看 | 青青青视频蜜桃一区二区 | 特级淫片欧美高清视频蜜桃 | 国产91在线免费 | 天天色国产| 男女男精品视频网站 | 国产资源站 | 久久国产乱子伦精品免费不卡 | 99热精品在线观看 | 禁忌h1v1怀孕 | 久久天堂成人影院 | 亚洲国产精品嫩草影院久久 |