《人工智能基礎(chǔ)》課件-第6章 深度學(xué)習(xí)_第1頁
《人工智能基礎(chǔ)》課件-第6章 深度學(xué)習(xí)_第2頁
《人工智能基礎(chǔ)》課件-第6章 深度學(xué)習(xí)_第3頁
《人工智能基礎(chǔ)》課件-第6章 深度學(xué)習(xí)_第4頁
《人工智能基礎(chǔ)》課件-第6章 深度學(xué)習(xí)_第5頁
已閱讀5頁,還剩135頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

人工智能基礎(chǔ)第6章深度學(xué)習(xí)

學(xué)習(xí)目標1.了解深度學(xué)習(xí)的基本概念。2.了解數(shù)字圖像的基本知識。3.了解神經(jīng)網(wǎng)絡(luò)的基本原理。4.掌握神經(jīng)網(wǎng)絡(luò)的實現(xiàn)方法。5.了解卷積神經(jīng)網(wǎng)絡(luò)的基本知識。6.掌握卷積神經(jīng)網(wǎng)絡(luò)模型的搭建和使用方法。6.1TensorFlow游樂場6.1TensorFlow游樂場TensorFlow游樂場由谷歌公司開發(fā),是一款通過瀏覽器進行神經(jīng)網(wǎng)絡(luò)訓(xùn)練的圖形化在線工具,支持訓(xùn)練過程和結(jié)果的可視化展示。通過對網(wǎng)頁瀏覽器的簡單操作,用戶針對不同的數(shù)據(jù)按照自己的想法訓(xùn)練神經(jīng)網(wǎng)絡(luò),訓(xùn)練過程和結(jié)果可以直接圖像化形式顯示出來,獲得直觀的感性體驗,更加容易理解神經(jīng)網(wǎng)絡(luò)的訓(xùn)練流程和復(fù)雜原理。6.1.1TensorFlow游樂場簡介在瀏覽器中輸入網(wǎng)址,打開如圖6-1-1所示TensorFlow游樂場的主頁。頁面中主要包括DATA(數(shù)據(jù))、FEATURES(特征)、HIDDENLAYERS(隱藏層)、OUTPUT(輸出)和參數(shù)設(shè)置五個區(qū)域。6.1.1TensorFlow游樂場簡介6.1.1TensorFlow游樂場簡介

6.1.1TensorFlow游樂場簡介(4)參數(shù)設(shè)置區(qū)域參數(shù)設(shè)置區(qū)域中可以設(shè)置Epoch(訓(xùn)練次數(shù))、Learningrate(學(xué)習(xí)率)、Activation(激活函數(shù))、Regularization(正則化)、Regularizationrate(正則化率)和Problemtype(問題類型)。(5)OUTPUT區(qū)域OUTPUT區(qū)域中可以動態(tài)實時顯示訓(xùn)練的當前情況。6.1.2TensorFlow游樂場實例在TensorFlow游樂場的分類實例中,神經(jīng)網(wǎng)絡(luò)的任務(wù)是對輸入的數(shù)據(jù)特征通過多個隱藏層的相互作用獲得可以劃分數(shù)據(jù)中兩類的分界線。因此對于不同的數(shù)據(jù)可以設(shè)計不同的神經(jīng)網(wǎng)絡(luò)模型來進行處理。6.1.2TensorFlow游樂場實例1.不同數(shù)據(jù)的訓(xùn)練結(jié)果對比6.1.2TensorFlow游樂場實例1.不同數(shù)據(jù)的訓(xùn)練結(jié)果對比6.1.2TensorFlow游樂場實例

6.1.2TensorFlow游樂場實例2.針對復(fù)雜數(shù)據(jù)的改善方法增加輸入特征的數(shù)量6.1.2TensorFlow游樂場實例2.針對復(fù)雜數(shù)據(jù)的改善方法增加隱藏層的層數(shù)和每層神經(jīng)元的數(shù)目6.1.3習(xí)題與實踐1.簡答題TensorFlow游樂場包括哪些區(qū)域?層與層之間的連線的含義?針對復(fù)雜數(shù)據(jù)的改善方法有哪些?2.實踐題參考圖6-1-5,對螺旋型數(shù)據(jù)分類問題,將特征的數(shù)目、神經(jīng)網(wǎng)絡(luò)層數(shù)和每層神經(jīng)元個數(shù)增加到最大,得到穩(wěn)定的測試數(shù)據(jù)誤差,對比不同的激活函數(shù)對最終結(jié)果的影響。參考圖6-1-5,任意修改神經(jīng)元之間的權(quán)重值,比較調(diào)整前后的分類效果,調(diào)整學(xué)習(xí)率,了解其對模型訓(xùn)練的影響。打開TensorFlow游樂場主頁,并對plane數(shù)據(jù)以默認設(shè)置進行回歸分析,并嘗試修改DATA(數(shù)據(jù))區(qū)域的數(shù)據(jù)微調(diào)按鍵,觀察對其最終結(jié)果的影響,同樣在默認設(shè)置下修改參數(shù)設(shè)置區(qū)域的參數(shù),觀察對其最終結(jié)果的影響。6.2神經(jīng)網(wǎng)絡(luò)基本原理6.2神經(jīng)網(wǎng)絡(luò)基本原理在上一節(jié)中,我們通過TensorFlow游樂場交互式體驗了神經(jīng)網(wǎng)絡(luò)的基本處理過程,發(fā)現(xiàn)復(fù)雜的神經(jīng)網(wǎng)絡(luò)是由大量的節(jié)點(神經(jīng)元)聯(lián)結(jié)構(gòu)成。本節(jié)將介紹TensorFlow游樂場背后的基本原理,首先介紹神經(jīng)元模型,然后介紹感知器的基本概念,最后介紹神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程。6.2.1神經(jīng)元與感知器1.神經(jīng)元模型人工神經(jīng)元的數(shù)學(xué)模型如圖該模型的數(shù)學(xué)表達式為:6.2.1神經(jīng)元與感知器2.激活函數(shù)當神經(jīng)元模型中無激活函數(shù)f時,輸出結(jié)果只是相當于輸入結(jié)果的線性組合,這樣其表達能力不強,無法解決異或問題,因此通過引入激活函數(shù)f來實現(xiàn)神經(jīng)元的非線性計算,從而增強其表達能力,神經(jīng)網(wǎng)絡(luò)中常用的激活函數(shù)有Sigmoid函數(shù)、tanh函數(shù)和ReLU函數(shù)等。6.2.1神經(jīng)元與感知器

6.2.1神經(jīng)元與感知器

6.2.1神經(jīng)元與感知器

6.2.1神經(jīng)元與感知器

6.2.2BP神經(jīng)網(wǎng)絡(luò)BP(BackPropagation)神經(jīng)網(wǎng)絡(luò)指的是多層前饋神經(jīng)網(wǎng)絡(luò),其結(jié)構(gòu)如圖所示:6.2.2BP神經(jīng)網(wǎng)絡(luò)

6.2.2BP神經(jīng)網(wǎng)絡(luò)誤差反向傳播(ErrorBackPropagation)算法,簡稱BP算法,是訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)常用也是非常有效的算法,核心思想是通過誤差值對神經(jīng)網(wǎng)絡(luò)模型的參數(shù)進行動態(tài)調(diào)整。該方法是由正向傳播和反向傳播兩次傳播方法組成:正向傳播:輸入信號通過輸入層進入網(wǎng)絡(luò),順序經(jīng)過每個隱藏層,最后產(chǎn)生出輸出信號(預(yù)測值);反向傳播:根據(jù)正向傳播后得到的誤差值(預(yù)測值與真實值之差),從輸出層經(jīng)過隱藏層最終直到輸入層反向傳播更新神經(jīng)網(wǎng)絡(luò)模型中的參數(shù),利用梯度下降法動態(tài)的調(diào)整各層神經(jīng)元參數(shù)后使損失函數(shù)最小。6.2.2BP神經(jīng)網(wǎng)絡(luò)BP算法是一種監(jiān)督學(xué)習(xí)的算法,完整流程圖6.2.2BP神經(jīng)網(wǎng)絡(luò)輸入數(shù)據(jù)集,包括特征和標簽兩部分:特征值用于神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練,標簽值(真實值)用于損失函數(shù)計算誤差值。損失函數(shù),利用模型的預(yù)測值和數(shù)據(jù)集的真實值計算誤差值,對應(yīng)于Keras中編譯函數(shù)pile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])的參數(shù)loss。常用的損失函數(shù)有sparse_categorical_crossentropy、mean_squared_error、mean_absolute_error等,相關(guān)信息可參考5.1.4的評價指標。6.2.2BP神經(jīng)網(wǎng)絡(luò)優(yōu)化器,在模型訓(xùn)練的過程中不斷更新模型的參數(shù)(權(quán)重和偏差),從而使得誤差值最小,并獲得使誤差值最小的權(quán)重和偏差,對應(yīng)于Keras中編譯函數(shù)pile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])的參數(shù)optimizer。常用的優(yōu)化器包括SGD、Adam、RMSprop等,一般來說,深度學(xué)習(xí)中推薦使用Adam優(yōu)化器。6.2.3習(xí)題與實踐1.簡答題神經(jīng)網(wǎng)絡(luò)中常用的激活函數(shù)有哪些?Sigmoid函數(shù)和tanh函數(shù)作為激活函數(shù)的優(yōu)缺點?ReLU函數(shù)作為激活函數(shù)比Sigmoid函數(shù)的優(yōu)勢?為什么說BP算法是一種監(jiān)督學(xué)習(xí)的算法。2.實踐題利用下圖的感知器模型,其中激活函數(shù)記為f(),計算輸出結(jié)果y1和y2。6.3神經(jīng)網(wǎng)絡(luò)構(gòu)建6.3神經(jīng)網(wǎng)絡(luò)構(gòu)建在前面的章節(jié)中,我們直觀體驗了神經(jīng)網(wǎng)絡(luò)的設(shè)計和訓(xùn)練過程,并了解了神經(jīng)網(wǎng)絡(luò)的基本原理。本節(jié)將介紹如何在自己的個人計算機上實現(xiàn)神經(jīng)網(wǎng)絡(luò)模型的構(gòu)建和訓(xùn)練。本節(jié)首先介紹在Windows系統(tǒng)下基于Anaconda3(64-bit)安裝TensorFlow,然后介紹如何構(gòu)建一個簡單的深度學(xué)習(xí)模型,最后展示幾種針對該深度學(xué)習(xí)模型的優(yōu)化方法。6.3.1TensorFlow簡介當前主流的深度學(xué)習(xí)框架有TensorFlow、Keras、PaddlePaddle、PyTorch、Caffe等。TensorFlow是谷歌公司開發(fā)的一個開源機器學(xué)習(xí)平臺,可以高效地在CPU、GPU或TPU上執(zhí)行張量計算,方便用戶開發(fā)和訓(xùn)練機器學(xué)習(xí)模型。Keras是一個對用戶友好、用Python編寫的高度模塊化的神經(jīng)網(wǎng)絡(luò)庫,隨著TensorFlow2.0的推出,Keras作為其高階API已經(jīng)集成其中。因此,我們在搭建深度學(xué)習(xí)環(huán)境時,只需要安裝TensorFlow2.0即可。訪問TensorFlow官網(wǎng)()可以獲取更多幫助。6.3.1TensorFlow簡介1.安裝TensorFlow以管理員身份運行AnacondaPrompt,輸入如下代碼進行安裝:pipinstalltensorflow安裝完成后顯示的最后界面如下。6.3.1TensorFlow簡介2.查看版本信息打開JupyterNotebook(Anaconda3),新建一個Python3的Notebook。輸入例6-3-1查看TensorFlow和Keras的版本信息的代碼。6.3.1TensorFlow簡介2.查看版本信息上述代碼的輸出結(jié)果如下:下圖展示例6-3-1在JupyterNotebook運行結(jié)果。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型Keras是TensorFlow2.0的高階API,可以只用幾行代碼就能方便快速地構(gòu)建神經(jīng)網(wǎng)絡(luò)模型。Keras的核心數(shù)據(jù)結(jié)構(gòu)是model(模型),用以組織網(wǎng)絡(luò)層,其中Sequential模型(序貫?zāi)P停┦亲詈唵蔚哪P?。利用Keras構(gòu)建神經(jīng)網(wǎng)絡(luò)模型時,主要涉及的步驟為:載入數(shù)據(jù)、數(shù)據(jù)預(yù)處理、構(gòu)建Sequential模型、利用compile函數(shù)進行編譯、利用fit函數(shù)訓(xùn)練模型、模型的評估和對新數(shù)據(jù)的預(yù)測。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型例6-3-2利用Keras構(gòu)建神經(jīng)網(wǎng)絡(luò)模型,對FashionMNIST數(shù)據(jù)集進行分類。FashionMNIST數(shù)據(jù)集由大小為28*28、分為10個類別的70000張灰色圖像組成,其中60000張訓(xùn)練集圖像,以及10000張測試集圖像,類別標簽與圖像所表示的服裝類別對應(yīng)關(guān)系如表所示。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型1.分類FashionMNIST數(shù)據(jù)集的簡單版。利用Keras構(gòu)建神經(jīng)網(wǎng)絡(luò)模型分類FashionMNIST數(shù)據(jù)集的簡單版程序(fl6-3-2-1)如下。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型1.分類FashionMNIST數(shù)據(jù)集的簡單版。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型1.分類FashionMNIST數(shù)據(jù)集的簡單版。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型上述程序的分段解釋如下:(1)導(dǎo)入TensorFlow通過import導(dǎo)入TensorFlow庫,由于Keras已經(jīng)集成到TensorFlow2.0里,此處就不需要再額外導(dǎo)入Keras庫。(2)載入Fashion-MNIST數(shù)據(jù)集Keras提供了常用的7個數(shù)據(jù)集:利用類似的方法可以載入相關(guān)數(shù)據(jù)集,調(diào)用格式如下:(X_train,y_train),(X_test,y_test)=tf.keras.datasets.datasets_name.load_data()其中,X_train和y_train分別代表訓(xùn)練集的特征和標簽,X_test和y_test分別代表測試集的特征和標簽。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型首次載入數(shù)據(jù)集時,如果文件夾下沒有相關(guān)數(shù)據(jù)集,程序會自動下載,但可能花費較久時間,因此可以將“配套資源\第6章\datasets\Fashion-MNIST”復(fù)制到該文件夾下,避免額外的數(shù)據(jù)集載入時間。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型在載入數(shù)據(jù)集之后,一般首先要對數(shù)據(jù)集進行探索,以便后續(xù)的數(shù)據(jù)處理和模型訓(xùn)練。補充如下相關(guān)知識。顯示訓(xùn)練集、測試集的結(jié)構(gòu)信息通過如下代碼可對訓(xùn)練集、測試集的結(jié)構(gòu)信息進行顯示。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型對圖像與類別標簽進行映射顯示訓(xùn)練集的圖像和相應(yīng)的標簽結(jié)合上述映射表class_names,查看訓(xùn)練集的數(shù)據(jù)特征和標簽,并找出圖像與類別標簽的對應(yīng)關(guān)系。通過如下代碼,顯示訓(xùn)練集的前20個圖像和相應(yīng)的標簽。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型利用plt.subplot(nrows,ncols,index)函數(shù)進行子圖繪制。其中,nrows,表示行數(shù);ncols,表示列數(shù);index表示索引值。比如本例的plt.subplot(4,5,i+1)表示繪制4行5列總共二十個子圖的i+1個子圖。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型顯示訓(xùn)練集的單幅圖像和其表示的內(nèi)容通過如下代碼,顯示訓(xùn)練集的第2個圖像和其表示的內(nèi)容。T恤/上衣圖像T恤/上衣的內(nèi)容信息6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型(3)利用reshape函數(shù)轉(zhuǎn)換數(shù)字圖像由圖6-3-5和圖6-3-6可知,圖像的尺寸為28*28。圖6-3-6中每個數(shù)值代表圖像灰度值的大小,0代表黑色,255代表白色。為了進行后續(xù)模型訓(xùn)練,本步利用reshape函數(shù)將二維圖像(28*28)數(shù)據(jù)轉(zhuǎn)換為一維向量(784)。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型

以下補充介紹,如何查看經(jīng)過reshape轉(zhuǎn)換之后訓(xùn)練集和測試集的形狀。顯示reshape轉(zhuǎn)換后數(shù)據(jù)信息6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型(4)歸一化數(shù)字圖像由圖6-3-6可知,T恤/上衣的的像素值分布范圍是0~255,可以簡單的通過同除以255來實現(xiàn)歸一化。歸一化之后T恤/上衣圖像結(jié)果如圖6-3-7所示。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型(5)構(gòu)建Sequential模型本步利用Sequential模型簡單地線性堆疊網(wǎng)絡(luò)層來構(gòu)建神經(jīng)網(wǎng)絡(luò)模型。實際上,通過model.add()也可以實現(xiàn)相同的功能,補充相關(guān)如下。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型(5)構(gòu)建Sequential模型6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型(5)構(gòu)建Sequential模型6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型(5)構(gòu)建Sequential模型例6-3-2的模型圖6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型(5)構(gòu)建Sequential模型6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型(6)模型編譯6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型(7)模型訓(xùn)練6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型程序運行結(jié)果如圖所示:6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型

6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型觀察圖6-3-10可知,隨著訓(xùn)練周期的增加,訓(xùn)練集和驗證集的準確率在不斷提高,損失函數(shù)值不斷減小。在訓(xùn)練后期時,驗證集的準確率低于訓(xùn)練集的準確率,出現(xiàn)了輕微過擬合的現(xiàn)象。注意:代碼參數(shù)初始化的不同,可能會導(dǎo)致程序運行結(jié)果與圖6-3-9和圖6-3-10不完全相同。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型(8)模型評估6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型(9)模型預(yù)測模型訓(xùn)練好后,利用model.predict_classes()或者model.predict()函數(shù)進行預(yù)測。本步使用歸一化后的測試集圖像進行預(yù)測。為了便于查看預(yù)測效果和保存模型,補充以下內(nèi)容顯示測試集的圖像預(yù)測類別和真實類別。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型運行結(jié)果如圖6-3-12所示,第三行第三列的運動鞋被誤分為涼鞋,第四行第三列的外套被誤分為套頭衫。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型模型保存和加載。神經(jīng)網(wǎng)絡(luò)的模型訓(xùn)練完成,可以通過model.save()函數(shù)以.h5格式的模型文件進行保存。此外,還可通過tf.keras.models.load_model()函數(shù)加載已保存的模型文件,然后進行預(yù)測。示例代碼如下。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型2.分類FashionMNIST數(shù)據(jù)集的完整版經(jīng)過對例6-3-2的學(xué)習(xí),了解了分類FashionMNIST數(shù)據(jù)集的基本流程。以下完整版程序是對簡單版進行增強,使其更加完整和實用。完整版程序與簡單版程序的主體基本一致,增加或修改的代碼見深色底紋。利用Keras構(gòu)建神經(jīng)網(wǎng)絡(luò)模型分類FashionMNIST數(shù)據(jù)集的完整版程序(fl6-3-2-2)如下。6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型2.分類FashionMNIST數(shù)據(jù)集的完整版6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型2.分類FashionMNIST數(shù)據(jù)集的完整版6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型2.分類FashionMNIST數(shù)據(jù)集的完整版6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型2.分類FashionMNIST數(shù)據(jù)集的完整版6.3.2一個簡單的神經(jīng)網(wǎng)絡(luò)模型2.分類FashionMNIST數(shù)據(jù)集的完整版6.3.3模型優(yōu)化我們在6.1節(jié)體驗TensorFlow游樂場得到的一個直觀感受:對于同一個數(shù)據(jù)集,神經(jīng)網(wǎng)絡(luò)模型如果想獲得更好的分類效果,可以增加數(shù)據(jù)集的輸入特征數(shù)量、增加隱藏層神經(jīng)元數(shù)目和隱藏層層數(shù)。然而,現(xiàn)實中很難找到更多合理的表現(xiàn)數(shù)據(jù)內(nèi)在特性的屬性特征作為輸入。那么,在輸入的特征數(shù)目不變時,可行性的方法包括:增加隱藏層神經(jīng)元的數(shù)目;增加隱藏層的層數(shù)。6.3.3模型優(yōu)化1.增加隱藏層神經(jīng)元的數(shù)目例6-3-3在例6-3-2的基礎(chǔ)上,通過增加隱藏層神經(jīng)元數(shù)目,對FashionMNIST數(shù)據(jù)集進行分類,提高準確率。為了增加神經(jīng)網(wǎng)絡(luò)模型的分類準確率,本例將簡單版程序(fl6-3-2-1)模型中的隱藏層神經(jīng)元數(shù)目增加至500,修改后神經(jīng)網(wǎng)絡(luò)模型的代碼如下。本程序與簡單版程序(fl6-3-2-1)的主體基本一致,增加或修改的代碼見深色底紋。6.3.3模型優(yōu)化1.增加隱藏層神經(jīng)元的數(shù)目6.3.3模型優(yōu)化1.增加隱藏層神經(jīng)元的數(shù)目6.3.3模型優(yōu)化1.增加隱藏層神經(jīng)元的數(shù)目打印模型概況的結(jié)果如下所示。6.3.3模型優(yōu)化1.增加隱藏層神經(jīng)元的數(shù)目該神經(jīng)網(wǎng)絡(luò)在其他結(jié)構(gòu)不變的情況下,只將Hidden層的神經(jīng)元數(shù)目從50個增加到500個,準確率從簡單版程序(fl6-3-2-1)的0.8977上升到0.9159,模型訓(xùn)練的結(jié)果如圖6-3-13所示:6.3.3模型優(yōu)化2.增加隱藏層的層數(shù)例6-3-4在例6-3-2的基礎(chǔ)上,通過增加隱藏層層數(shù),對FashionMNIST數(shù)據(jù)集進行分類,提高準確率。為了增加神經(jīng)網(wǎng)絡(luò)模型的分類準確率,本例將簡單版程序(fl6-3-2-1)模型中隱藏層增加至3層,每層50個神經(jīng)元,修改后神經(jīng)網(wǎng)絡(luò)模型的代碼如下,本程序與簡單版程序(fl6-3-2-1)的主體基本一致,增加或修改的代碼見深色底紋。6.3.3模型優(yōu)化2.增加隱藏層的層數(shù)6.3.3模型優(yōu)化2.增加隱藏層的層數(shù)6.3.3模型優(yōu)化2.增加隱藏層的層數(shù)打印模型概況的結(jié)果如下所示:6.3.3模型優(yōu)化2.增加隱藏層的層數(shù)該神經(jīng)網(wǎng)絡(luò)模型在隱藏層神經(jīng)元為50的情況下,將Hidden層層數(shù)增加至3層,準確率從簡單版程序(fl6-3-2-1)的0.8977上升到0.9020,模型訓(xùn)練的結(jié)果如圖6-3-14所示:6.3.4習(xí)題與實踐1.簡答題簡述Keras與tf.keras的區(qū)別與聯(lián)系。簡述利用Keras構(gòu)建神經(jīng)網(wǎng)絡(luò)模型主要步驟。簡述在輸入的特征數(shù)目不變的情況下,有哪些模型優(yōu)化的可行性方法。2.實踐題在自己計算機上安裝TensorFlow,并在JupyterNotebook顯示TensorFlow和Keras的版本信息。打開“配套資源\第6章\sy6-3-1.py”,補全程序,完成以下功能:利用Keras構(gòu)建神經(jīng)網(wǎng)絡(luò)模型分類fashion_mnist數(shù)據(jù)集,增加隱藏層的神經(jīng)元數(shù)目,使得訓(xùn)練集的準確率超過0.92。打開“配套資源\第6章\sy6-3-2.py”,補全程序,完成以下功能:利用Keras構(gòu)建神經(jīng)網(wǎng)絡(luò)模型分類fashion_mnist數(shù)據(jù)集,增加兩層隱藏層的神經(jīng)元數(shù)目,使得訓(xùn)練集的準確率超過0.93。6.4卷積神經(jīng)網(wǎng)絡(luò)6.4卷積神經(jīng)網(wǎng)絡(luò)在上一節(jié),我們利用Keras構(gòu)建了一個簡單的神經(jīng)網(wǎng)絡(luò)模型,對FashionMNIST數(shù)據(jù)集的圖像數(shù)據(jù)進行分類,并取得較好的分類效果。但我們在模型訓(xùn)練時,是將28*28的圖像數(shù)據(jù)轉(zhuǎn)換成784的一維向量作為模型的輸入層,這樣也就丟掉了圖像的空間特性,而該特性是多個像素構(gòu)成圖像的關(guān)鍵因素;輸入層的神經(jīng)元個數(shù)會隨著輸入圖像的尺寸的增加而顯著增多,為克服傳統(tǒng)神經(jīng)網(wǎng)絡(luò)模型的這些不足,一種包含卷積運算的新神經(jīng)網(wǎng)絡(luò)模型——卷積神經(jīng)網(wǎng)絡(luò)誕生,廣泛的應(yīng)用于機器視覺、圖像識別等領(lǐng)域。6.4卷積神經(jīng)網(wǎng)絡(luò)介紹數(shù)字圖像處理的基礎(chǔ)知識,介紹卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)和基礎(chǔ)知識,在Keras下搭建卷積神經(jīng)網(wǎng)絡(luò)模型來對FashionMNIST灰度圖像數(shù)據(jù)集和CIFAR10彩色圖像數(shù)據(jù)集進行分類,并探討不同模型結(jié)構(gòu)對分類效果的影響。6.4.1數(shù)字圖像基礎(chǔ)數(shù)字圖像是由有限個像素(Pixe)組成的,以兩維數(shù)組或矩陣形式保存,主要用圖像分辨率和灰度級來描述,圖像格式主要包括BMP、GIF、JPEG、PNG等。數(shù)字圖像主要分為二值圖像、灰度圖像和彩色圖像(如圖6-4-1所示)。6.4.1數(shù)字圖像基礎(chǔ)Python提供了用于數(shù)字圖像處理的開源庫,包括PIL/Pillow、CV2、Matplotlib、scikit-image等。PIL(PythonImagingLibrary)是Python的標準庫(只支持到Python2.7),使用簡單且提供了基本的圖像處理功能,Pillow是PIL的一個分支(最新版本8.0.1),可以支持到Python3.9;CV2是OpenCV的Python版,功能強大應(yīng)用廣泛,讀入圖像的默認順序為BGR;Matplotlib是Python中類似Matlab的2D繪圖庫;scikit-image是基于scipy的將圖片作為numpy數(shù)組來處理的一個Python圖像處理庫。6.4.1數(shù)字圖像基礎(chǔ)Python安裝Pillow非常簡單,只需要pip用一行代碼即可完成,首先以管理員身份運行AnacondaPrompt(Anaconda3),輸入如下代碼進行安裝:6.4.1數(shù)字圖像基礎(chǔ)1.圖像讀寫和顯示例6-4-1利用Pillow庫,實現(xiàn)圖像文件的讀寫和顯示等基本操作。注意:為便于程序運行,請將素材文件“配套資源\第6章\lena.jpg”復(fù)制到源文件(.py文件或.ipynb文件)所在的路徑下。6.4.1數(shù)字圖像基礎(chǔ)2.圖像顏色通道例6-4-2利用Pillow庫,實現(xiàn)圖像的顏色信息輸出。6.4.1數(shù)字圖像基礎(chǔ)2.圖像顏色通道上述代碼的輸出結(jié)果如下:6.4.1數(shù)字圖像基礎(chǔ)3.圖像基本操作例6-4-3利用Pillow庫,實現(xiàn)圖像旋轉(zhuǎn)、大小調(diào)整、剪切、濾波等基本操作。6.4.1數(shù)字圖像基礎(chǔ)3.圖像基本操作上述代碼的輸出結(jié)果如下:6.4.2卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)由圖6-3-8可知,傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型是由輸入層、隱藏層和輸出層組成,且每層都是由多個神經(jīng)元構(gòu)成(模型輸入也是經(jīng)reshape()函數(shù)轉(zhuǎn)換的一維向量)。如圖6-4-4所示,卷積神經(jīng)網(wǎng)絡(luò)模型與其有顯著不同:該模型主要是由卷積層、池化層、全連接層等構(gòu)成;模型輸入可以是二維灰度圖像(如6.4.3節(jié)的實例1)、三維彩色圖像(如6.4.3節(jié)的實例2)。6.4.2卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)卷積神經(jīng)網(wǎng)絡(luò)模型的核心是通過卷積層和池化層提取圖像的底層特征,隨著層數(shù)不斷增加,會將低級特征映射到圖像的高級特征,最后基于提出的高級特征由全連接層來完成圖像分類。由此可知,卷積層和池化層一般是成對出現(xiàn),為了減輕過擬合的現(xiàn)象,也會加入Dropout層,模型最后一般是用于分類的全連接層,分類可以是單神經(jīng)元的二分類也可以是多神經(jīng)元的多分類。注意,卷積層、池化層、Dropout層和全連接層出現(xiàn)的次數(shù)不唯一,是需要用戶根據(jù)具體的需求來指定的。6.4.2卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)1.卷積層卷積層,顧名思義,是對輸入的圖像進行“卷積”運算,獲取圖像的特征。淺層的卷積層主要學(xué)習(xí)圖像的低級基礎(chǔ)特征,隨著層數(shù)的增加,深層的卷積層學(xué)習(xí)到更高級的圖像特征。圖像的“卷積”操作是用一個小的卷積核遍歷圖像中的每一個像素,針對每個像素將其周圍像素與卷積核對應(yīng)元素相乘再求和,得到新圖像的像素值。比如圖像為3*3的二維矩陣,卷積核為2*2的矩陣,如下圖所示:6.4.2卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)1.卷積層6.4.2卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)1.卷積層6.4.2卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)2.池化層池化層在卷積神經(jīng)網(wǎng)絡(luò)中主要是對圖像進行下采樣降低圖像的尺寸,即卷積層輸出的特征向量維數(shù),從而降低過擬合現(xiàn)象和減少需要計算的參數(shù),池化層一般是在卷積層之后,主要有最大池化(MaxPooling2D)和平均池化(AveragePooling2D)兩種。池化層的操作和卷積類似,都是需要一個類似卷積核的濾波器算子遍歷圖像中的每個像素。6.4.2卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)2.池化層最大池化6.4.2卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)2.池化層平均池化6.4.2卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)2.池化層池化主要涉及兩個參數(shù)pool_size和strides,pool_size指定池化窗口的尺寸,strides表示池化的步長,池化后獲得的新圖像尺寸計算方法與卷積類似。池化操作可以將圖像中不同位置的特征通過均值或者最大值整合到一起,降低圖像特征的維度和需要計算的參數(shù),減輕過擬合的現(xiàn)象。6.4.2卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)3.全連接層如圖6-4-4所示,卷積層和池化層是實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)特征提取的核心模塊,通過多個卷積層和池化層的不斷疊加,可獲得圖像的高級特征,然后經(jīng)過全連接層基于卷積層提取特征進行決策分類。此時全連接層對應(yīng)6.3節(jié)簡單版程序(fl6-3-2-1)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),包括輸入層、隱藏層和輸出層。進入全連接層時需要將卷積層的多維數(shù)據(jù)利用Flatten()函數(shù)進行扁平化變?yōu)橐痪S向量,最后輸出層可以是單神經(jīng)元(二分類)或者多個神經(jīng)元(多分類)。注意全連接層的層數(shù)和每層神經(jīng)元的個數(shù)并非固定的,是用戶根據(jù)實際問題來指定。6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集例6-4-4利用Keras構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)模型對FashionMNIST數(shù)據(jù)集進行分類。FashionMNIST數(shù)據(jù)集包含大小為28*28、分為10個類別的60000張灰色圖像和同樣是大小28*28、分為10個類別的10000張灰色圖像的測試集,其類別標簽與圖像所表示的服裝類別對應(yīng)關(guān)系如表6-4-1所示。6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集本程序與6.3節(jié)完整版程序(fl6-3-2-2)的主體基本一致,增加或修改的代碼見深色底紋,本程序的分段解釋如下:6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集(5)利用reshape函數(shù)轉(zhuǎn)換數(shù)字圖像利用reshape()函數(shù)修改訓(xùn)練集和測試集的形狀,從而進行后續(xù)的卷積神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練。(6)查看經(jīng)過reshape之后訓(xùn)練集和測試集的形狀程序運行結(jié)果如下所示:將原訓(xùn)練集和測試集的形狀(60000,28,28)、(10000,28,28)利用reshape()函數(shù)分別轉(zhuǎn)換為(60000,28,28,1)、(10000,28,28,1),方便輸入到卷積神經(jīng)網(wǎng)絡(luò)模型中。6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集(10)構(gòu)建全連接層該段代碼是構(gòu)建全連接層用于分類,首先利用Flatten()函數(shù)將輸入數(shù)據(jù)的維度拉伸成一維,然后添加了一個包含50個神經(jīng)元的全連接層,最后添加10個神經(jīng)元輸出層,對應(yīng)Fashion-MNIST數(shù)據(jù)集的10個類別,因為是多分類問題,所以activation='softmax'。其中,F(xiàn)latten()函數(shù)作用是將上一層的維度拉伸成一維向量,與reshape()函數(shù)功能類似,一般在出現(xiàn)在卷積神經(jīng)網(wǎng)絡(luò)的末端。(11)打印模型的概況程序運行結(jié)果如下所示:6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集(12)模型編譯該段代碼主要利用pile()函數(shù)實現(xiàn)模型的編譯,詳細解釋內(nèi)容可以參考6.3節(jié)簡單版程序(fl6-3-2-1)的代碼段(6)的解釋。(13)模型訓(xùn)練該段代碼主要利用model.fit()函數(shù)實現(xiàn)模型的訓(xùn)練,詳細解釋內(nèi)容可以參考6.3節(jié)簡單版程序(fl6-3-2-1)的代碼段(7)的解釋。程序運行結(jié)果如下所示:6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集(14)模型評估模型訓(xùn)練后,使用測試集數(shù)據(jù),利用model.evaluate()函數(shù)對模型進行評估,詳細解釋內(nèi)容可以參考6.3節(jié)簡單版程序(fl6-3-2-1)的代碼段(8)的解釋。程序運行結(jié)果如下所示:6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集(17)計算混淆矩陣為了更好的理解卷積神經(jīng)網(wǎng)絡(luò)模型對測試集不同類別圖像的分類正確率,總結(jié)分類效果的相關(guān)信息,可以通過計算混淆矩陣(ConfusionMatrix)的方法來實現(xiàn)。利用sklearn中的confusion_matrix()函數(shù)對y_test和prediction計算混淆矩陣。程序運行結(jié)果如下所示:6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例1.實例1CNN分類FashionMNIST數(shù)據(jù)集(15)模型預(yù)測模型訓(xùn)練好后,利用model.predict_classes()函數(shù)進行預(yù)測,本步利用經(jīng)歸一化后的測試集圖像進行預(yù)測。(16)顯示測試集的前20個圖像的預(yù)測類別和真實類別為了便于查看預(yù)測效果和保存模型,該段代碼來顯示測試集的前20個圖像的預(yù)測類別和真實類別。程序運行結(jié)果如下所示:6.4.3卷積神經(jīng)網(wǎng)絡(luò)實例2.實例2CNN分類CIFAR10數(shù)據(jù)集例6-4-5利用Keras構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)模型對CIFAR10數(shù)據(jù)集進行分類。

溫馨提示

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

評論

0/150

提交評論