欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python MNIST手寫(xiě)體識(shí)別詳解與試練

 更新時(shí)間:2021年11月06日 10:33:27   作者:mind_programmonkey  
MNIST(官方網(wǎng)站)是非常有名的手寫(xiě)體數(shù)字識(shí)別數(shù)據(jù)集,在Tensorflow的官方網(wǎng)站里,第一個(gè)就拿它來(lái)做實(shí)戰(zhàn)講解,咱們也以此作為開(kāi)始的項(xiàng)目

【人工智能項(xiàng)目】MNIST手寫(xiě)體識(shí)別實(shí)驗(yàn)及分析

在這里插入圖片描述

1.實(shí)驗(yàn)內(nèi)容簡(jiǎn)述

1.1 實(shí)驗(yàn)環(huán)境

本實(shí)驗(yàn)采用的軟硬件實(shí)驗(yàn)環(huán)境如表所示:

在這里插入圖片描述

在Windows操作系統(tǒng)下,采用基于Tensorflow的Keras的深度學(xué)習(xí)框架,對(duì)MNIST進(jìn)行訓(xùn)練和測(cè)試。

采用keras的深度學(xué)習(xí)框架,keras是一個(gè)專(zhuān)為簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)組裝而設(shè)計(jì)的Python庫(kù),具有大量預(yù)先包裝的網(wǎng)絡(luò)類(lèi)型,包括二維和三維風(fēng)格的卷積網(wǎng)絡(luò)、短期和長(zhǎng)期的網(wǎng)絡(luò)以及更廣泛的一般網(wǎng)絡(luò)。使用keras構(gòu)建網(wǎng)絡(luò)是直接的,keras在其Api設(shè)計(jì)中使用的語(yǔ)義是面向?qū)哟蔚模W(wǎng)絡(luò)組建相對(duì)直觀,所以本次選用Keras人工智能框架,其專(zhuān)注于用戶友好,模塊化和可擴(kuò)展性。

1.2 MNIST數(shù)據(jù)集介紹

MNIST(官方網(wǎng)站)是非常有名的手寫(xiě)體數(shù)字識(shí)別數(shù)據(jù)集。它由手寫(xiě)體數(shù)字的圖片和相對(duì)應(yīng)的標(biāo)簽組成,如:

在這里插入圖片描述

MNIST數(shù)據(jù)集分為訓(xùn)練圖像和測(cè)試圖像。訓(xùn)練圖像60000張,測(cè)試圖像10000張,每一個(gè)圖片代表0-9中的一個(gè)數(shù)字,且圖片大小均為28*28的矩陣。

  • train-images-idx3-ubyte.gz: training set images (9912422 bytes) 訓(xùn)練圖片
  • train-labels-idx1-ubyte.gz: training set labels (28881 bytes) 訓(xùn)練標(biāo)簽
  • t10k-images-idx3-ubyte.gz: test set images (1648877 bytes) 測(cè)試圖片
  • t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes) 測(cè)試標(biāo)簽

1.3 數(shù)據(jù)預(yù)處理

數(shù)據(jù)預(yù)處理階段對(duì)圖像進(jìn)行歸一化處理,我們將圖片中的這些值縮小到 0 到 1 之間,然后將其饋送到神經(jīng)網(wǎng)絡(luò)模型。為此,將圖像組件的數(shù)據(jù)類(lèi)型從整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù),然后除以 255。這樣更容易訓(xùn)練,以下是預(yù)處理圖像的函數(shù):務(wù)必要以相同的方式對(duì)訓(xùn)練集和測(cè)試集進(jìn)行預(yù)處理:

之后對(duì)標(biāo)簽進(jìn)行one-hot編碼處理:將離散特征的取值擴(kuò)展到了歐式空間,離散特征的某個(gè)取值就對(duì)應(yīng)歐式空間的某個(gè)點(diǎn);機(jī)器學(xué)習(xí)算法中,特征之間距離的計(jì)算或相似度的常用計(jì)算方法都是基于歐式空間的;將離散型特征使用one-hot編碼,會(huì)讓特征之間的距離計(jì)算更加合理

2.實(shí)驗(yàn)核心代碼

(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卷積神經(jīng)網(wǎng)絡(luò)

# 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()

模型解釋

模型訓(xùn)練過(guò)程中,我們用到LENET-5的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。

在這里插入圖片描述

第一層,卷積層

這一層的輸入是原始的圖像像素,LeNet-5 模型接受的輸入層大小是28x28x1。第一卷積層的過(guò)濾器的尺寸是5x5,深度(卷積核種類(lèi))為6,不使用全0填充,步長(zhǎng)為1。因?yàn)闆](méi)有使用全0填充,所以這一層的輸出的尺寸為32-5+1=28,深度為6。這一層卷積層參數(shù)個(gè)數(shù)是5x5x1x6+6=156個(gè)參數(shù)(可訓(xùn)練參數(shù)),其中6個(gè)為偏置項(xiàng)參數(shù)。因?yàn)橄乱粚拥墓?jié)點(diǎn)矩陣有有28x28x6=4704個(gè)節(jié)點(diǎn)(神經(jīng)元數(shù)量),每個(gè)節(jié)點(diǎn)和5x5=25個(gè)當(dāng)前層節(jié)點(diǎn)相連,所以本層卷積層總共有28x28x6x(5x5+1)個(gè)連接。

第二層,池化層

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

第三層,卷積層

本層的輸入矩陣大小為14x14x6,使用的過(guò)濾器大小為5x5,深度為16。本層不使用全0填充,步長(zhǎng)為1。本層的輸出矩陣大小為10x10x16。按照標(biāo)準(zhǔn)卷積層本層應(yīng)該有5x5x6x16+16=2416個(gè)參數(shù)(可訓(xùn)練參數(shù)),10x10x16x(5x5+1)=41600個(gè)連接。

第四層,池化層

本層的輸入矩陣大小是10x10x16,采用的過(guò)濾器大小是2x2,步長(zhǎng)為2,本層的輸出矩陣大小為5x5x16。

第五層,全連接層

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

第六層,全連接層

本層的輸入節(jié)點(diǎn)個(gè)數(shù)為120個(gè),輸出節(jié)點(diǎn)個(gè)數(shù)為84個(gè),總共參數(shù)為120x84+84=10164個(gè)。

第七層,全連接層

LeNet-5 模型中最后一層輸出層的結(jié)構(gòu)和全連接層的結(jié)構(gòu)有區(qū)別,但這里我們用全連接層近似的表示。本層的輸入節(jié)點(diǎn)為84個(gè),輸出節(jié)點(diǎn)個(gè)數(shù)為10個(gè),總共有參數(shù)84x10+10=850個(gè)。

模型過(guò)程

初始參數(shù)設(shè)定好之后開(kāi)始訓(xùn)練,每次訓(xùn)練需要微調(diào)參數(shù)以得到更好的訓(xùn)練結(jié)果,經(jīng)過(guò)多次嘗試,最終設(shè)定參數(shù)為:

  • 優(yōu)化器:adam優(yōu)化器
  • 訓(xùn)練輪數(shù):10
  • 每次輸入的數(shù)據(jù)量:500

LENET-5的卷積神經(jīng)網(wǎng)絡(luò)對(duì)MNIST數(shù)據(jù)集進(jìn)行訓(xùn)練,并采用上述的模型參數(shù),進(jìn)行10輪訓(xùn)練,在訓(xùn)練集上達(dá)到了95%的準(zhǔn)確率

在這里插入圖片描述

3.結(jié)果分析機(jī)器總結(jié)

3.1 模型測(cè)試以及結(jié)果分析

為了驗(yàn)證模型的魯棒性,在上述最優(yōu)參數(shù)下保存在驗(yàn)證集上性能最好的模型,在測(cè)試集上進(jìn)行最終的測(cè)試,得到最終的準(zhǔn)確率為:95.13%.

為了更好的分析我們的結(jié)果,這里用混淆矩陣來(lái)評(píng)估我們的模型性能。在模型評(píng)估之前,先學(xué)習(xí)一些指標(biāo)。

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

混淆矩陣是機(jī)器學(xué)習(xí)中總結(jié)分類(lèi)模型預(yù)測(cè)結(jié)果的情形分析表,以矩陣形式將數(shù)據(jù)集中的記錄按照真實(shí)的類(lèi)別與分類(lèi)模型預(yù)測(cè)的類(lèi)別判斷兩個(gè)標(biāo)準(zhǔn)進(jìn)行匯總。其中矩陣的行表示真實(shí)值,矩陣的列表示預(yù)測(cè)值,下面以本次案例為例,看下矩陣表現(xiàn)形式,如下:

在這里插入圖片描述

在這里插入圖片描述

3.2 結(jié)果對(duì)比

并與四層全連接層模型進(jìn)行對(duì)比,全連接層的模型結(jié)構(gòu)如下:

在這里插入圖片描述

其結(jié)果如下:

在這里插入圖片描述

在這里插入圖片描述

總之,從結(jié)果上來(lái)看,最后經(jīng)過(guò)不斷地參數(shù)調(diào)優(yōu)最終訓(xùn)練出了一個(gè)分類(lèi)正確率在95%左右的模型,并且通過(guò)實(shí)驗(yàn)證明了模型具有很強(qiáng)的魯棒性。

3.3 模型的預(yù)測(cè)

對(duì)單張圖像進(jìn)行預(yù)測(cè):

在這里插入圖片描述

4 總結(jié)

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

在這里插入圖片描述

到此這篇關(guān)于Python MNIST手寫(xiě)體識(shí)別詳解與試練的文章就介紹到這了,更多相關(guān)Python 手寫(xiě)體識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python3解析庫(kù)BeautifulSoup4的安裝配置與基本用法

    python3解析庫(kù)BeautifulSoup4的安裝配置與基本用法

    簡(jiǎn)單來(lái)說(shuō),BeautifulSoup就是Python的一個(gè)HTML或XML的解析庫(kù),我們可以用它來(lái)方便地從網(wǎng)頁(yè)中提取數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于python3解析庫(kù)BeautifulSoup4的安裝配置與基本用法的相關(guān)資料,需要的朋友可以參考下
    2018-06-06
  • python3爬蟲(chóng)怎樣構(gòu)建請(qǐng)求header

    python3爬蟲(chóng)怎樣構(gòu)建請(qǐng)求header

    在本篇內(nèi)容里小編給大家分享了關(guān)于python3爬蟲(chóng)怎樣構(gòu)建請(qǐng)求header的知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。
    2018-12-12
  • Python連接Impala實(shí)現(xiàn)步驟解析

    Python連接Impala實(shí)現(xiàn)步驟解析

    這篇文章主要介紹了Python連接Impala實(shí)現(xiàn)步驟解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Python自動(dòng)采集微信聯(lián)系人的實(shí)現(xiàn)示例

    Python自動(dòng)采集微信聯(lián)系人的實(shí)現(xiàn)示例

    這篇文章主要介紹了Python自動(dòng)采集微信聯(lián)系人的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Python數(shù)據(jù)類(lèi)型中的“冒號(hào)“[::]——分片與步長(zhǎng)操作示例

    Python數(shù)據(jù)類(lèi)型中的“冒號(hào)“[::]——分片與步長(zhǎng)操作示例

    這篇文章主要介紹了Python數(shù)據(jù)類(lèi)型中的“冒號(hào)“[::]——分片與步長(zhǎng)操作,結(jié)合實(shí)例形式分析了Python基本數(shù)據(jù)類(lèi)型中的分片與步長(zhǎng)使用方法及相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • python 獲取et和excel的版本號(hào)

    python 獲取et和excel的版本號(hào)

    在進(jìn)行OA開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)用到當(dāng)前辦公軟件的版本號(hào),在python可以通過(guò)如下的方法獲取。
    2009-04-04
  • Python用棧實(shí)現(xiàn)隊(duì)列的基本操作

    Python用棧實(shí)現(xiàn)隊(duì)列的基本操作

    隊(duì)列(Queue)和棧(Stack)是常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),它們?cè)谟?jì)算機(jī)科學(xué)中有著廣泛的應(yīng)用,在Python中,可以使用列表(List)來(lái)實(shí)現(xiàn)棧,但要用棧來(lái)實(shí)現(xiàn)隊(duì)列需要一些巧妙的操作,本文就給大家詳細(xì)介紹一下Python中如何用棧實(shí)現(xiàn)隊(duì)列,需要的朋友可以參考下
    2023-11-11
  • python處理變量交換與字符串及判斷的小妙招

    python處理變量交換與字符串及判斷的小妙招

    本文記錄一些 Python 日常編程中的小妙招,并使用 IPython 進(jìn)行交互測(cè)試,讓我們更好的了解和學(xué)習(xí) Python 的一些特性,對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 13個(gè)Pandas實(shí)用技巧,助你提高開(kāi)發(fā)效率

    13個(gè)Pandas實(shí)用技巧,助你提高開(kāi)發(fā)效率

    這篇文章主要介紹了13個(gè)Pandas實(shí)用技巧,幫助你提高python開(kāi)發(fā)的效率,感興趣的朋友可以了解下
    2020-08-08
  • Python函數(shù)基礎(chǔ)(定義函數(shù)、函數(shù)參數(shù)、匿名函數(shù))

    Python函數(shù)基礎(chǔ)(定義函數(shù)、函數(shù)參數(shù)、匿名函數(shù))

    這篇文章介紹了Python函數(shù)的基礎(chǔ)用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05

最新評(píng)論