TensorFlow+Keras深度學(xué)習(xí)人工智能實(shí)踐應(yīng)用_第1頁(yè)
TensorFlow+Keras深度學(xué)習(xí)人工智能實(shí)踐應(yīng)用_第2頁(yè)
TensorFlow+Keras深度學(xué)習(xí)人工智能實(shí)踐應(yīng)用_第3頁(yè)
TensorFlow+Keras深度學(xué)習(xí)人工智能實(shí)踐應(yīng)用_第4頁(yè)
TensorFlow+Keras深度學(xué)習(xí)人工智能實(shí)踐應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩311頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

TensorFlowKeras深度學(xué)習(xí)人工智能實(shí)踐應(yīng)用目錄\h第1章人工智能、機(jī)器學(xué)習(xí)與深度學(xué)習(xí)簡(jiǎn)介\h1.1人工智能、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)的關(guān)系\h1.2機(jī)器學(xué)習(xí)介紹\h1.3機(jī)器學(xué)習(xí)分類\h1.4深度學(xué)習(xí)簡(jiǎn)介\h1.5結(jié)論\h第2章深度學(xué)習(xí)的原理\h2.1神經(jīng)傳導(dǎo)的原理\h2.2以矩陣運(yùn)算仿真神經(jīng)網(wǎng)絡(luò)\h2.3多層感知器模型\h2.4使用反向傳播算法進(jìn)行訓(xùn)練\h2.5結(jié)論\h第3章TensorFlow與Keras介紹\h3.1TensorFlow架構(gòu)圖\h3.2TensorFlow簡(jiǎn)介\h3.3TensorFlow程序設(shè)計(jì)模式\h3.4Keras介紹\h3.5Keras程序設(shè)計(jì)模式\h3.6Keras與TensorFlow比較\h3.7結(jié)論\h第4章在Windows中安裝TensorFlow與Keras\h4.1安裝Anaconda\h4.2啟動(dòng)命令提示符\h4.3建立TensorFlow的Anaconda虛擬環(huán)境\h4.4在Anaconda虛擬環(huán)境安裝TensorFlow與Keras\h4.5啟動(dòng)JupyterNotebook\h4.6結(jié)論\h第5章在LinuxUbuntu中安裝TensorFlow與Keras\h5.1安裝Anaconda\h5.3啟動(dòng)JupyterNotebook\h5.4結(jié)論\h第6章KerasMNIST手寫數(shù)字識(shí)別數(shù)據(jù)集\h6.1下載MNIST數(shù)據(jù)\h6.2查看訓(xùn)練數(shù)據(jù)\h6.3查看多項(xiàng)訓(xùn)練數(shù)據(jù)images與label\h6.4多層感知器模型數(shù)據(jù)預(yù)處理\h6.5features數(shù)據(jù)預(yù)處理\h6.6label數(shù)據(jù)預(yù)處理\h6.7結(jié)論\h第7章Keras多層感知器識(shí)別手寫數(shù)字\h7.1Keras多元感知器識(shí)別MNIST手寫數(shù)字圖像的介紹\h7.2進(jìn)行數(shù)據(jù)預(yù)處理\h7.3建立模型\h7.4進(jìn)行訓(xùn)練\h7.5以測(cè)試數(shù)據(jù)評(píng)估模型準(zhǔn)確率\h7.6進(jìn)行預(yù)測(cè)\h7.7顯示混淆矩陣\h7.8隱藏層增加為1000個(gè)神經(jīng)元\h7.9多層感知器加入DropOut功能以避免過度擬合\h7.10建立多層感知器模型包含兩個(gè)隱藏層\h7.11結(jié)論\h第8章Keras卷積神經(jīng)網(wǎng)絡(luò)識(shí)別手寫數(shù)字\h8.1卷積神經(jīng)網(wǎng)絡(luò)簡(jiǎn)介\h8.2進(jìn)行數(shù)據(jù)預(yù)處理\h8.3建立模型\h8.4進(jìn)行訓(xùn)練\h8.5評(píng)估模型準(zhǔn)確率\h8.6進(jìn)行預(yù)測(cè)\h8.7顯示混淆矩陣\h8.8結(jié)論\h第9章KerasCIFAR-10圖像識(shí)別數(shù)據(jù)集\h9.1下載CIFAR-10數(shù)據(jù)\h9.2查看訓(xùn)練數(shù)據(jù)\h9.3查看多項(xiàng)images與label\h9.4將images進(jìn)行預(yù)處理\h9.5對(duì)label進(jìn)行數(shù)據(jù)預(yù)處理\h9.6結(jié)論\h第10章Keras卷積神經(jīng)網(wǎng)絡(luò)識(shí)別CIFAR-10圖像\h10.1卷積神經(jīng)網(wǎng)絡(luò)簡(jiǎn)介\h10.2數(shù)據(jù)預(yù)處理\h10.3建立模型\h10.4進(jìn)行訓(xùn)練\h10.5評(píng)估模型準(zhǔn)確率\h10.6進(jìn)行預(yù)測(cè)\h10.7查看預(yù)測(cè)概率\h10.8顯示混淆矩陣\h10.9建立3次的卷積運(yùn)算神經(jīng)網(wǎng)絡(luò)\h10.10模型的保存與加載\h10.11結(jié)論\h第11章Keras泰坦尼克號(hào)上的旅客數(shù)據(jù)集\h11.1下載泰坦尼克號(hào)旅客數(shù)據(jù)集\h11.2使用PandasDataFrame讀取數(shù)據(jù)并進(jìn)行預(yù)處理\h11.3使用PandasDataFrame進(jìn)行數(shù)據(jù)預(yù)處理\h11.4將DataFrame轉(zhuǎn)換為Array\h11.5將ndarray特征字段進(jìn)行標(biāo)準(zhǔn)化\h11.6將數(shù)據(jù)分為訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)\h11.7結(jié)論\h第12章Keras多層感知器預(yù)測(cè)泰坦尼克號(hào)上旅客的生存概率\h12.1數(shù)據(jù)預(yù)處理\h12.2建立模型\h12.3開始訓(xùn)練\h12.4評(píng)估模型準(zhǔn)確率\h12.5加入《泰坦尼克號(hào)》電影中Jack與Rose的數(shù)據(jù)\h12.6進(jìn)行預(yù)測(cè)\h12.7找出泰坦尼克號(hào)背后的感人故事\h12.8結(jié)論\h第13章IMDb網(wǎng)絡(luò)電影數(shù)據(jù)集與自然語(yǔ)言處理\h13.1Keras自然語(yǔ)言處理介紹\h13.2下載IMDb數(shù)據(jù)集\h13.3讀取IMDb數(shù)據(jù)\h13.4查看IMDb數(shù)據(jù)\h13.5建立token\h13.6使用token將“影評(píng)文字”轉(zhuǎn)換成“數(shù)字列表”\h13.7讓轉(zhuǎn)換后的數(shù)字長(zhǎng)度相同\h13.8結(jié)論\h第14章Keras建立MLP、RNN、LSTM模型進(jìn)行IMDb情感分析\h14.1建立多層感知器模型進(jìn)行IMDb情感分析\h14.2數(shù)據(jù)預(yù)處理\h14.3加入嵌入層\h14.4建立多層感知器模型\h14.5訓(xùn)練模型\h14.6評(píng)估模型準(zhǔn)確率\h14.7進(jìn)行預(yù)測(cè)\h14.8查看測(cè)試數(shù)據(jù)預(yù)測(cè)結(jié)果\h14.9查看《美女與野獸》的影評(píng)\h14.10預(yù)測(cè)《美女與野獸》的影評(píng)是正面或負(fù)面的\h14.11文字處理時(shí)使用較大的字典提取更多文字\h14.12RNN模型介紹\h14.13使用KerasRNN模型進(jìn)行IMDb情感分析\h14.14LSTM模型介紹\h14.15使用KerasLSTM模型進(jìn)行IMDb情感分析\h14.16結(jié)論\h第15章TensorFlow程序設(shè)計(jì)模式\h15.1建立“計(jì)算圖”\h15.2執(zhí)行“計(jì)算圖”\h15.3TensorFlowplaceholder\h15.4TensorFlow數(shù)值運(yùn)算方法介紹\h15.5TensorBoard\h15.6建立一維與二維張量\h15.7矩陣基本運(yùn)算\h15.8結(jié)論\h第16章以TensorFlow張量運(yùn)算仿真神經(jīng)網(wǎng)絡(luò)的運(yùn)行\(zhòng)h16.1以矩陣運(yùn)算仿真神經(jīng)網(wǎng)絡(luò)\h16.2以placeholder傳入\hX\h值\h16.3創(chuàng)建layer函數(shù)以矩陣運(yùn)算仿真神經(jīng)網(wǎng)絡(luò)\h16.4建立layer_debug函數(shù)顯示權(quán)重與偏差\h16.5結(jié)論\h第17章TensorFlowMNIST手寫數(shù)字識(shí)別數(shù)據(jù)集\h17.1下載MNIST數(shù)據(jù)\h17.2查看訓(xùn)練數(shù)據(jù)\h17.3查看多項(xiàng)訓(xùn)練數(shù)據(jù)images與labels\h17.4批次讀取MNIST數(shù)據(jù)\h17.5結(jié)論\h第18章TensorFlow多層感知器識(shí)別手寫數(shù)字\h18.1TensorFlow建立多層感知器辨識(shí)手寫數(shù)字的介紹\h18.2數(shù)據(jù)準(zhǔn)備\h18.3建立模型\h18.4定義訓(xùn)練方式\h18.5定義評(píng)估模型準(zhǔn)確率的方式\h18.6進(jìn)行訓(xùn)練\h18.7評(píng)估模型準(zhǔn)確率\h18.8進(jìn)行預(yù)測(cè)\h18.9隱藏層加入更多神經(jīng)元\h18.10建立包含兩個(gè)隱藏層的多層感知器模型\h18.11結(jié)論\h第19章TensorFlow卷積神經(jīng)網(wǎng)絡(luò)識(shí)別手寫數(shù)字\h19.1卷積神經(jīng)網(wǎng)絡(luò)簡(jiǎn)介\h19.2進(jìn)行數(shù)據(jù)預(yù)處理\h19.3建立共享函數(shù)\h19.4建立模型\h19.5定義訓(xùn)練方式\h19.6定義評(píng)估模型準(zhǔn)確率的方式\h19.7進(jìn)行訓(xùn)練\h19.8評(píng)估模型準(zhǔn)確率\h19.9進(jìn)行預(yù)測(cè)\h19.10TensorBoard\h19.11結(jié)論\h第20章TensorFlowGPU版本的安裝\h20.1確認(rèn)顯卡是否支持CUDA\h20.2安裝CUDA\h20.3安裝cuDNN\h20.4將cudnn64_5.dll存放的位置加入Path環(huán)境變量\h20.5在Anaconda建立TensorFlowGPU虛擬環(huán)境\h20.6安裝TensorFlowGPU版本\h20.7安裝Keras\h20.8結(jié)論\h第21章使用GPU加快TensorFlow與Keras訓(xùn)練\h21.1啟動(dòng)TensorFlowGPU環(huán)境\h21.2測(cè)試GPU與CPU執(zhí)行性能\h21.3超出顯卡內(nèi)存的限制\h21.4以多層感知器的實(shí)際范例比較CPU與GPU的執(zhí)行速度\h21.5以CNN的實(shí)際范例比較CPU與GPU的執(zhí)行速度\h21.6以KerasCifarCNN的實(shí)際范例比較CPU與GPU的執(zhí)行速度\h21.7結(jié)論\h附錄A本文范例程序的下載與安裝說明\hA.1在Windows系統(tǒng)中下載與安裝范例程序\hA.2在UbuntuLinux系統(tǒng)中下載與安裝范例程序第1章人工智能、機(jī)器學(xué)習(xí)與深度學(xué)習(xí)簡(jiǎn)介近年來,人工智能(ArtificialIntelligence,AI)吸引了大眾與媒體的目光,AlphaGo的成功讓人工智能技術(shù)變得更加炙手可熱,其實(shí)AI早已進(jìn)入你我的生活中,例如我們手機(jī)中的語(yǔ)音助理、人臉識(shí)別、影音平臺(tái)的每日推薦等。然而,人工智能的發(fā)展才剛剛起步,未來人工智能的應(yīng)用將會(huì)深入生活中的每一個(gè)層面,也就是說未來一定是AI的時(shí)代。1.1人工智能、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)的關(guān)系人工智能、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)的關(guān)系整理如圖1-1所示。圖1-1?人工智能“人工智能”一詞最早是在20世紀(jì)50年代提出的。人工智能的目標(biāo)是讓計(jì)算機(jī)像人一樣思考與學(xué)習(xí)。被視為人工智能之父的圖靈(AlanMathisonTuring)提出了著名的“圖靈測(cè)試”(TuringTesting):人類與機(jī)器通過電傳設(shè)備對(duì)話,如果人類無法根據(jù)這個(gè)對(duì)話過程判斷對(duì)方是機(jī)器或人,通過圖靈測(cè)試就可以認(rèn)定這臺(tái)機(jī)器具有人工智能。20世紀(jì)80年代,約翰?塞爾(JohnSearle)提出了對(duì)“人工智能”的分類方式。強(qiáng)人工智能(StrongAI):機(jī)器具有與人類一樣完整的認(rèn)知能力。弱人工智能(WeakAI):機(jī)器不需要具有與人類一樣完整的認(rèn)知能力,只要設(shè)計(jì)得看起來像具有智慧即可。?機(jī)器學(xué)習(xí)機(jī)器學(xué)習(xí)(MachineLearning)是人工智能的分支。機(jī)器學(xué)習(xí)是通過算法,使用大量數(shù)據(jù)進(jìn)行訓(xùn)練,訓(xùn)練完成后會(huì)產(chǎn)生模型。將來有新的數(shù)據(jù)時(shí),我們可以使用訓(xùn)練產(chǎn)生的模型進(jìn)行預(yù)測(cè)。機(jī)器學(xué)習(xí)可分為有監(jiān)督的學(xué)習(xí)(SupervisedLearning)、無監(jiān)督的學(xué)習(xí)(UnsupervisedLearning)和增強(qiáng)式學(xué)習(xí)(ReinforcementLearning)。機(jī)器應(yīng)用相當(dāng)廣泛,例如推薦引擎、定向廣告、需求預(yù)測(cè)、垃圾郵件過濾、醫(yī)學(xué)診斷、自然語(yǔ)言處理、搜索引擎、詐騙偵測(cè)、證券分析、視覺識(shí)別、語(yǔ)音識(shí)別、手寫識(shí)別,等等。?深度學(xué)習(xí)深度學(xué)習(xí)(DeepLearning)也是機(jī)器學(xué)習(xí)的分支。深度學(xué)習(xí)是人工智能中成長(zhǎng)最快的領(lǐng)域,深度學(xué)習(xí)仿真人類神經(jīng)網(wǎng)絡(luò)的工作方式,常見的深度學(xué)習(xí)架構(gòu)有多層感知器(Multi-LayerPerceptron)、深度神經(jīng)網(wǎng)絡(luò)(DeepNeuralNetwork,DNN)、卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeuralNetwork,CNN)、遞歸神經(jīng)網(wǎng)絡(luò)(RecurrentNeuralNetwork,RNN)。深度學(xué)習(xí)已經(jīng)應(yīng)用于視覺識(shí)別、語(yǔ)音識(shí)別、自然語(yǔ)言處理、生物醫(yī)學(xué)等領(lǐng)域,并且取得了非常好的效果。?為何近年來人工智能發(fā)展加速早在20世紀(jì)60年代及70年代,科學(xué)家就提出了各種機(jī)器學(xué)習(xí)的算法,然而受限于當(dāng)時(shí)計(jì)算機(jī)的計(jì)算能力以及大量數(shù)據(jù)的獲取也不容易,因而機(jī)器學(xué)習(xí)一直都沒有很成功。大數(shù)據(jù)(BigData)分布式存儲(chǔ)與運(yùn)算隨著全球設(shè)備、機(jī)器和系統(tǒng)的相互連接,從而產(chǎn)生了大量數(shù)據(jù),再加上分布式存儲(chǔ)(例如Hadoop、NoSQL等)的發(fā)展,也提供了大量數(shù)據(jù),而且大量服務(wù)器的并行計(jì)算功能(例如Spark等)提供了巨大的運(yùn)算能力。大量數(shù)據(jù)與運(yùn)算能力就像燃料,推動(dòng)了機(jī)器學(xué)習(xí)與深度學(xué)習(xí)的加速發(fā)展。GPU、TPU并行計(jì)算GPU(GraphicsProcessingUnit,圖形處理器)原本用來處理畫面像素的運(yùn)算,例如電腦游戲界面所需要的大量圖形運(yùn)算。CPU與GPU架構(gòu)上有著根本的不同:CPU含有數(shù)顆核心,為順序處理進(jìn)行優(yōu)化,而GPU可以有高達(dá)數(shù)千個(gè)小型而且高效率的核心,可以發(fā)揮并行計(jì)算的強(qiáng)大功能,如圖1-2所示。圖1-2深度學(xué)習(xí)以大量矩陣運(yùn)算模擬神經(jīng)元的工作方式,矩陣運(yùn)算的特性是,單一運(yùn)算都很簡(jiǎn)單,但是需要大量運(yùn)算,特別適合采用并行計(jì)算。GPU通過大量核心進(jìn)行并行計(jì)算,可讓通過GPU進(jìn)行深度學(xué)習(xí)訓(xùn)練比通過CPU進(jìn)行深度學(xué)習(xí)訓(xùn)練快10~75倍,讓訓(xùn)練的時(shí)間從數(shù)周縮短為數(shù)天。而Google公司更在2016年宣布,研發(fā)人工智能專用芯片TPU(TensorProcessingUnit,張量處理單元或張量處理芯片)來進(jìn)行并行計(jì)算。TPU是專為深度學(xué)習(xí)特定用途設(shè)計(jì)的特殊規(guī)格的邏輯芯片(IC),使得深度學(xué)習(xí)的訓(xùn)練速度更快。1.2機(jī)器學(xué)習(xí)介紹機(jī)器學(xué)習(xí)的訓(xùn)練數(shù)據(jù)是由features、label組成的。features:數(shù)據(jù)的特征,例如濕度、風(fēng)向、風(fēng)速、季節(jié)、氣壓。label:數(shù)據(jù)的標(biāo)簽,也就是我們希望預(yù)測(cè)的目標(biāo),例如降雨(0:不會(huì)下雨、1:會(huì)下雨)、天氣(1:晴天、2:雨天、3:陰天、4:下雪)、氣溫。如圖1-3所示,機(jī)器學(xué)習(xí)可分為兩個(gè)階段:訓(xùn)練(Training)訓(xùn)練數(shù)據(jù)是過去累積的歷史數(shù)據(jù),可能是文本文件、數(shù)據(jù)庫(kù)或其他來源的數(shù)據(jù),經(jīng)過FeatureExtraction(特征提取)產(chǎn)生features(數(shù)據(jù)特征)與label(真實(shí)的標(biāo)簽數(shù)據(jù)),然后經(jīng)過機(jī)器學(xué)習(xí)算法訓(xùn)練后產(chǎn)生模型。預(yù)測(cè)(Predict)新輸入數(shù)據(jù),經(jīng)過FeatureExtraction(特征提取)產(chǎn)生features(數(shù)據(jù)特征),使用訓(xùn)練完成的模型進(jìn)行預(yù)測(cè),最后產(chǎn)生預(yù)測(cè)結(jié)果。圖1-31.3機(jī)器學(xué)習(xí)分類前面介紹過,機(jī)器學(xué)習(xí)可分為有監(jiān)督的學(xué)習(xí)、無監(jiān)督的學(xué)習(xí)和增強(qiáng)式學(xué)習(xí)。以下詳細(xì)介紹其分類。?有監(jiān)督的學(xué)習(xí)有監(jiān)督的學(xué)習(xí)的數(shù)據(jù)具備特征(features)與預(yù)測(cè)目標(biāo)(label),通過算法訓(xùn)練并建立模型。當(dāng)有新的數(shù)據(jù)時(shí),我們就可以使用模型進(jìn)行預(yù)測(cè)。有下列分類:二元分類已知濕度、風(fēng)向、風(fēng)速、季節(jié)、氣壓等數(shù)據(jù)特征,希望預(yù)測(cè)當(dāng)天是否會(huì)下雨(0:不會(huì)下雨、1:會(huì)下雨)。希望預(yù)測(cè)的目標(biāo)label有兩個(gè)選項(xiàng),就好像在做是非題。多元分類已知濕度、風(fēng)向、風(fēng)速、季節(jié)、氣壓等數(shù)據(jù)特征,希望預(yù)測(cè)當(dāng)天天氣(1:晴天、2:雨天、3:陰天、4:下雪)。希望預(yù)測(cè)的目標(biāo)label有多個(gè)選項(xiàng),就好像在做選擇題。回歸分析已知濕度、風(fēng)向、風(fēng)速、季節(jié)、氣壓等數(shù)據(jù)特征,希望預(yù)測(cè)當(dāng)天氣溫。希望預(yù)測(cè)的目標(biāo)label是連續(xù)的值,就好像在做計(jì)算題。?無監(jiān)督的學(xué)習(xí)對(duì)于無監(jiān)督的學(xué)習(xí),從現(xiàn)有數(shù)據(jù)我們不知道要預(yù)測(cè)的答案,所以沒有l(wèi)abel(預(yù)測(cè)目標(biāo))。例如,cluster集群算法將數(shù)據(jù)分成幾個(gè)差異性最大的群組,而群組內(nèi)的則相似程度最高。?增強(qiáng)式學(xué)習(xí)增強(qiáng)式學(xué)習(xí)的原理:借助定義動(dòng)作(Actions)、狀態(tài)(States)、獎(jiǎng)勵(lì)(Rewards)的方式不斷訓(xùn)練機(jī)器循序漸進(jìn),學(xué)會(huì)執(zhí)行某項(xiàng)任務(wù)的算法。例如,訓(xùn)練機(jī)器玩《超級(jí)瑪麗》電子游戲,動(dòng)作:左/右/跳,狀態(tài):當(dāng)前游戲的界面,獎(jiǎng)勵(lì):得分/受傷,借助不斷地訓(xùn)練學(xué)會(huì)玩游戲。常見的算法有Q-Learning、TD(TemporalDifference)、Sarsa。?機(jī)器學(xué)習(xí)分類整理機(jī)器學(xué)習(xí)分類整理見表1-1。表1-1機(jī)器學(xué)習(xí)分類整理(續(xù)表)?機(jī)器學(xué)習(xí)分類機(jī)器學(xué)習(xí)分類如圖1-4所示。圖1-4本文主要介紹深度學(xué)習(xí),如果你對(duì)機(jī)器學(xué)習(xí)與大數(shù)據(jù)有興趣,可以參考筆者的另一本文《Python+Spark2.0+Hadoop機(jī)器學(xué)習(xí)與大數(shù)據(jù)實(shí)戰(zhàn)》。1.4深度學(xué)習(xí)簡(jiǎn)介人腦的重量大約為一千多克,結(jié)構(gòu)非常復(fù)雜,預(yù)估具有860億個(gè)神經(jīng)元以及超過100兆條神經(jīng)相連,形成的網(wǎng)絡(luò)比最先進(jìn)的超級(jí)計(jì)算機(jī)還要強(qiáng)大。因?yàn)槿祟惿窠?jīng)網(wǎng)絡(luò)太過復(fù)雜,為了方便用計(jì)算機(jī)來仿真神經(jīng)網(wǎng)絡(luò),人們將神經(jīng)元分為多個(gè)層次。通常會(huì)有一個(gè)輸入層、一個(gè)輸出層,隱藏層可以有非常多層(見圖1-5),所以稱為深度學(xué)習(xí)。圖1-5?機(jī)器學(xué)習(xí)與深度學(xué)習(xí)的關(guān)系如圖1-6所示,深度學(xué)習(xí)的應(yīng)用很廣泛,你可以將深度學(xué)習(xí)技術(shù)應(yīng)用在有監(jiān)督的學(xué)習(xí)、無監(jiān)督的學(xué)習(xí)和增強(qiáng)式學(xué)習(xí)等領(lǐng)域。圖1-61.5結(jié)論本章我們介紹了人工智能、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)的關(guān)系以及它們的基本概念,并且簡(jiǎn)明介紹了機(jī)器學(xué)習(xí)的分類,下一章將詳細(xì)介紹深度學(xué)習(xí)的原理。第2章深度學(xué)習(xí)的原理本章將介紹深度學(xué)習(xí)與類神經(jīng)網(wǎng)絡(luò)的原理,并介紹如何以矩陣的數(shù)學(xué)公式來仿真類神經(jīng)網(wǎng)絡(luò)的運(yùn)行。2.1神經(jīng)傳導(dǎo)的原理1.神經(jīng)元的信息傳導(dǎo)神經(jīng)傳導(dǎo)的工作原理很復(fù)雜,在此我們只是簡(jiǎn)略介紹其概念,如圖2-1所示。圖2-1軸突傳送信息:神經(jīng)元長(zhǎng)出一個(gè)細(xì)長(zhǎng)條的軸突,以電流方式將信息傳遞給另一個(gè)神經(jīng)元。軸突最長(zhǎng)可達(dá)一米,最短只有幾十分之一毫米。樹突接收信息:樹突主要的功能是接收其他神經(jīng)元傳來的電化學(xué)信息,再傳遞給本身的細(xì)胞。突觸是輸入與輸出的神經(jīng)元傳遞的機(jī)制:輸入與輸出的神經(jīng)元之間發(fā)展出的特殊結(jié)構(gòu)稱為突觸,神經(jīng)元通過釋放化學(xué)物質(zhì)來傳遞信息,當(dāng)電壓達(dá)到臨界值時(shí),就會(huì)通過軸突傳送電脈沖動(dòng)作電位至接收神經(jīng)元。2.以數(shù)學(xué)公式仿真神經(jīng)元的信息傳導(dǎo)為了將神經(jīng)元的傳導(dǎo)用計(jì)算機(jī)來仿真,我們必須將神經(jīng)元的傳導(dǎo)以數(shù)學(xué)公式來表示。以圖2-2來說明如何以數(shù)學(xué)公式模擬神經(jīng)元的信息傳導(dǎo)。圖2-2圖2-2(續(xù))圖2-2可以整理為以下公式:y=activationfunction(x1×w1+x2×w2+x3×w3+b1)詳細(xì)說明如表2-1所示。表2-1以數(shù)學(xué)公式模擬神經(jīng)元的信息傳導(dǎo)參數(shù)說明3.激活函數(shù)通常為非線性函數(shù)以上激活函數(shù)可以仿真神經(jīng)傳導(dǎo)的工作方式將上一層神經(jīng)元信號(hào)傳遞到下一層。激活函數(shù)通常為非線性函數(shù),加入激活函數(shù)能讓神經(jīng)網(wǎng)絡(luò)處理比較復(fù)雜的非線性問題。表2-2所示為線性函數(shù)與非線性函數(shù)的圖像。表2-2線性函數(shù)與非線性函數(shù)的圖像Keras與TensorFlow支持很多激活函數(shù),不過在此我們介紹最常用的兩種:Sigmoid與ReLU。4.Sigmoid激活函數(shù)常用的激活函數(shù)Sigmoid公式如下:Sigmoid激活函數(shù)的圖像如圖2-3所示。圖2-3Sigmoid激活函數(shù)其實(shí)與人類感覺神經(jīng)對(duì)信號(hào)的接收類似,例如,當(dāng)接收神經(jīng)元所接收刺激的總和:小于臨界值時(shí),會(huì)忽略此刺激當(dāng)x<-5時(shí),輸出y接近0。大于臨界值時(shí),開始接收神經(jīng)刺激當(dāng)x范圍在-5與5之間時(shí),隨著x數(shù)值加大,y的數(shù)值也加大。達(dá)到一定程度時(shí),感覺會(huì)開始鈍化即使受到更大的刺激,感覺仍維持不變,即當(dāng)x>5時(shí),y的數(shù)值趨近于1。5.ReLU激活函數(shù)另一個(gè)很常見的激活函數(shù)ReLU的圖像如圖2-4所示。當(dāng)接收神經(jīng)元所接收刺激的總和:小于臨界值時(shí),會(huì)忽略此刺激輸入x小于0,y值是0。大于臨界值時(shí),開始接收神經(jīng)刺激輸入x大于0,y等于x。圖2-42.2以矩陣運(yùn)算仿真神經(jīng)網(wǎng)絡(luò)前面只是以數(shù)學(xué)運(yùn)算模擬單個(gè)接收神經(jīng)元,本節(jié)將介紹以矩陣模擬兩個(gè)接收神經(jīng)元。1.以矩陣運(yùn)算仿真神經(jīng)網(wǎng)絡(luò)的信息傳導(dǎo)多個(gè)接收神經(jīng)元的神經(jīng)網(wǎng)絡(luò)如圖2-5所示。圖2-5?以數(shù)學(xué)公式模擬輸出與接收神經(jīng)元的工作方式:y1=activationfunction(x1×w11+x2×w21+x3×w31+b1)y2=activationfunction(x1×w12+x2×w22+x3×w32+b2)?以上兩個(gè)數(shù)學(xué)公式可以整合成一個(gè)矩陣運(yùn)算公式:?另一種形式的矩陣公式表示如下:y=activation(x×w+b)?矩陣公式以中文表示如下:輸出=激活函數(shù)(輸入×權(quán)重+偏差)說明見表2-3。表2-3以數(shù)學(xué)公式模擬輸出與接收神經(jīng)元的工作方式參數(shù)說明2.3多層感知器模型在20世紀(jì)80年代,多層感知器(MultilayerPerceptron,MLP)模型是一種受歡迎的機(jī)器學(xué)習(xí)解決方案,尤其是在語(yǔ)音識(shí)別、圖像識(shí)別和機(jī)器翻譯等多個(gè)領(lǐng)域。到20世紀(jì)90年代,MLP遇到來自更簡(jiǎn)單的模型(例如,支持向量機(jī)(SupportVectorMachine,SVM))的強(qiáng)烈競(jìng)爭(zhēng)。近年來,由于深度學(xué)習(xí)的成功,多層感知器又重新受到業(yè)界的重視。1.以多層感知器模型識(shí)別MNIST手寫數(shù)字圖像我們將以多層感知器模型識(shí)別MNIST手寫數(shù)字圖像說明多層感知器模型的工作方式,如圖2-6所示。圖2-62.以矩陣公式仿真多層感知器模型的工作方式(見圖2-7)圖2-7?建立輸入層與隱藏層的公式:h1=ReLU(x×w1+b1)詳細(xì)說明如表2-4所示。表2-4輸入層與隱藏層的公式參數(shù)說明(續(xù)表)?建立隱藏層與輸出層公式:y=softmax(h1×w2+b2)詳細(xì)說明如表2-5所示。表2-5隱藏層與輸出層的公式參數(shù)說明2.4使用反向傳播算法進(jìn)行訓(xùn)練當(dāng)我們建立深度學(xué)習(xí)模型后,就必須進(jìn)行訓(xùn)練。反向傳播法(BackPropagation)是訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)的常見方法,并且與優(yōu)化器(Optimizer,例如梯度下降法)結(jié)合使用。反向傳播是一種有監(jiān)督的學(xué)習(xí)方法,必須輸入features(特征值)與label(真實(shí)的值)。簡(jiǎn)單來說,反向傳播算法就是“從錯(cuò)誤中學(xué)習(xí)”。多層感知器模型識(shí)別MNIST手寫數(shù)字圖像,過程整理如圖2-8所示。1.訓(xùn)練前必須先進(jìn)行“數(shù)據(jù)預(yù)處理”與“建立模型”(1)數(shù)據(jù)預(yù)處理:MNIST數(shù)據(jù)集經(jīng)過數(shù)據(jù)預(yù)處理產(chǎn)生features(數(shù)字圖像的特征值)、label(數(shù)字圖像真實(shí)的值),用于后續(xù)訓(xùn)練使用。(2)建立模型:建立多層感知模型,并且以隨機(jī)數(shù)初始化模型的權(quán)重(Weight)與偏差(Bias):w1、b1,w2、b2。圖2-82.反向傳播算法訓(xùn)練多層感知器模型(見圖2-9)圖2-9圖2-9說明如下:進(jìn)行訓(xùn)練時(shí),數(shù)據(jù)分為多個(gè)批次,例如每一批次200項(xiàng)數(shù)據(jù),然后每次讀取一批次數(shù)據(jù)進(jìn)行反向傳播算法訓(xùn)練。重復(fù)以下傳播和權(quán)重更新(weightupdate),直到誤差(loss)收斂。?傳播(1)模型輸入特征值:features(數(shù)字圖像的特征值),輸入到神經(jīng)網(wǎng)絡(luò)進(jìn)行計(jì)算。(2)模型輸出計(jì)算結(jié)果:經(jīng)過多個(gè)隱藏層網(wǎng)絡(luò)進(jìn)行計(jì)算,逐層向前傳播,最后到達(dá)輸出層,產(chǎn)生神經(jīng)網(wǎng)絡(luò)的輸出。?權(quán)重更新(1)損失函數(shù)計(jì)算誤差:使用損失函數(shù)計(jì)算模型輸出(預(yù)測(cè)的結(jié)果)與label(數(shù)字圖像真實(shí)的值)之間的誤差值。(2)優(yōu)化器更新權(quán)重與偏差:按照誤差值更新神經(jīng)元連接的權(quán)重與偏差,盡量使損失函數(shù)的誤差值最小化。3.損失函數(shù)簡(jiǎn)單地說,反向傳播算法就是“從錯(cuò)誤中學(xué)習(xí)”,而損失函數(shù)就是幫我們計(jì)算誤差。CrossEntropy是深度學(xué)習(xí)常用的損失函數(shù),說明如圖2-10所示。圖2-10以上損失函數(shù)計(jì)算模型輸出(預(yù)測(cè)的結(jié)果)與label(數(shù)字圖像真實(shí)的值)之間的誤差值,都是以O(shè)ne-HotEncoding(一位有效編碼)表示,例如預(yù)測(cè)數(shù)字7。label(數(shù)字圖像真實(shí)的值):由0算起第7個(gè)數(shù)字是1,其他都是0。模型輸出(預(yù)測(cè)的結(jié)果):預(yù)測(cè)結(jié)果0的概率是0.1(10%),預(yù)測(cè)結(jié)果1的概率是0.3(30%),等等。預(yù)測(cè)結(jié)果7的概率是0.9,代表預(yù)測(cè)結(jié)果數(shù)字7有90%的概率,其他的概率都不高。4.優(yōu)化器優(yōu)化器就是使用某種數(shù)值方法在不斷的批次訓(xùn)練中不斷更新權(quán)重與偏差,使損失函數(shù)的誤差值最小化,并最終找出誤差值最小的“權(quán)重與偏差的組合”。在深度學(xué)習(xí)中,通常使用隨機(jī)梯度下降法(StochasticGradientDescent,SGD)來對(duì)“權(quán)重與偏差的組合”進(jìn)行優(yōu)化。隨機(jī)梯度下降法可以想象成在所有“權(quán)重與偏差的組合”組成的高維度空間中,每個(gè)訓(xùn)練批次沿著每個(gè)維度下降的方向走一小步,經(jīng)過許多次步驟,就可以找到優(yōu)化的“權(quán)重與偏差的組合”。?二維權(quán)重與損失函數(shù)真實(shí)的深度學(xué)習(xí)中權(quán)重與偏差數(shù)量很多,會(huì)形成非常多維的空間。為了方便說明,我們假設(shè)最簡(jiǎn)單的情況,即只有兩個(gè)權(quán)重weight1(w1)與weight2(w2)。因?yàn)橹挥袃蓚€(gè)權(quán)重,所以可以把w1與w2畫成如圖2-11所示的二維圖形。圖2-11圖2-11說明如下:x軸是weight1(w1)。y軸是weight2(w2)。損失函數(shù)輸入兩個(gè)參數(shù):w1與w2。按照Loss(w1,w2)的數(shù)值可以畫出由多個(gè)橢圓形所組成的等高線,顏色越深,代表Loss數(shù)值越小。?SGD梯度下降法SGD梯度下降法就是每次沿著Loss下降的方向每個(gè)訓(xùn)練批次走一小步,經(jīng)過許多次訓(xùn)練步驟就能夠下降到Loss=0.1,損失函數(shù)的誤差最小化,如圖2-12所示。圖2-12梯度下降法,用比較通俗的說法就是:一個(gè)在山上的人正在尋找山谷最低點(diǎn)(試圖找到損失函數(shù)Loss的極小值)。因?yàn)榇箪F能見度低,看不見下山的道路,所以他必須利用局部信息來找到極小值。他使用梯度下降法,觀察當(dāng)前位置處的陡峭程度(梯度),然后沿著(下降梯度)最大的方向前進(jìn)。使用此方法不斷前進(jìn),最終找到山谷最低點(diǎn)。另外,還有許多隨機(jī)梯度下降法的變形,如RMSprop、Adagrad、Adadelta、Adam等,適用于不同的深度學(xué)習(xí)模型。不同的優(yōu)化器具有不同的訓(xùn)練效果,你可以參考這個(gè)網(wǎng)頁(yè)的說明:/2015/03/alec-radfords-animations-for.html此網(wǎng)頁(yè)上的圖以動(dòng)態(tài)方式顯示出不同的優(yōu)化器,以不同的路徑找到Loss的最小值。2.5結(jié)論本章我們介紹了深度學(xué)習(xí)類神經(jīng)網(wǎng)絡(luò)原理,并介紹了如何以矩陣數(shù)學(xué)公式來仿真類神經(jīng)網(wǎng)絡(luò)的運(yùn)行。接下來將介紹TensorFlow與Keras,可以讓我們構(gòu)建各種深度的學(xué)習(xí)模型。如果讀者有些地方還看不懂,沒有關(guān)系,只需要有基本概念,后續(xù)章節(jié)配合程序看就會(huì)清楚了。第3章TensorFlow與Keras介紹本章將介紹TensorFlow與Keras的概念和程序設(shè)計(jì)模式。TensorFlow功能強(qiáng)大,執(zhí)行效率高,支持各種平臺(tái),然而屬于低級(jí)的深度學(xué)習(xí)鏈接庫(kù),學(xué)習(xí)門檻高。所以本文先介紹Keras,它是高級(jí)的深度學(xué)習(xí)鏈接庫(kù),對(duì)初學(xué)者學(xué)習(xí)門檻低,可以很容易地建立深度學(xué)習(xí)模型,并且進(jìn)行訓(xùn)練、預(yù)測(cè)。等讀者熟悉深度學(xué)習(xí)模型概念之后,再來學(xué)習(xí)TensorFlow就比較輕松了。在第2章中,我們學(xué)習(xí)了深度學(xué)習(xí)的核心概念,是以張量(矩陣)運(yùn)算模擬神經(jīng)網(wǎng)絡(luò)的。因此TensorFlow的主要設(shè)計(jì)就是讓矩陣運(yùn)算達(dá)到最高性能,并且能夠在各種不同的平臺(tái)執(zhí)行。TensorFlow最初由Google(谷歌)公司的BrainTeam團(tuán)隊(duì)開發(fā),Google公司使用TensorFlow進(jìn)行研究及自身產(chǎn)品開發(fā),并于2015年11月公開了源代碼,在Apache2.0與開放源代碼規(guī)范下,所有的開發(fā)者都可以免費(fèi)使用。Google的很多產(chǎn)品早就使用了機(jī)器學(xué)習(xí)或深度學(xué)習(xí),例如Gmail過濾垃圾郵件、Google語(yǔ)音識(shí)別、Google圖像識(shí)別、Google翻譯等。TensorFlow功能強(qiáng)大又好用,Google為什么要開放源代碼呢?Google認(rèn)為機(jī)器學(xué)習(xí)是創(chuàng)新技術(shù),而且是未來技術(shù)的關(guān)鍵,這方面的研究是全球性而且增長(zhǎng)快速的,但是缺乏共同的標(biāo)準(zhǔn)。Google希望通過開源社區(qū)的分享建立一個(gè)龐大的社區(qū),并且建立共同的標(biāo)準(zhǔn),這樣可以擴(kuò)展各種深度學(xué)習(xí)的應(yīng)用領(lǐng)域,讓TensorFlow更加完善。3.1TensorFlow架構(gòu)圖TensorFlow架構(gòu)圖說明如圖3-1所示。圖3-1參照以上的架構(gòu)圖,我們自下而上進(jìn)行說明。?處理器:TensorFlow可以在CPU、GPU、TPU中執(zhí)行CPU:每一臺(tái)計(jì)算機(jī)都有中央處理器(CPU),可以執(zhí)行TensorFlow。GPU:圖形處理器,GPU含有高達(dá)數(shù)千個(gè)微小且高效率的計(jì)算內(nèi)核,可以發(fā)揮并行計(jì)算的強(qiáng)大功能。TPU:TPU(TensorProcessingUnit)是Google為人工智能(AI)研發(fā)的專用芯片,比GPU的計(jì)算性能更佳,不過目前只部署在Google數(shù)據(jù)中心,也許未來會(huì)對(duì)外銷售。?平臺(tái):TensorFlow具備跨平臺(tái)能力,可以在目前主流的平臺(tái)執(zhí)行TensorFlow可以在不需修改程序代碼的前提下,讓深度學(xué)習(xí)模型在不同的平臺(tái)上執(zhí)行訓(xùn)練,以提升效率。Windows:個(gè)人計(jì)算機(jī)最常用的操作系統(tǒng),讓初學(xué)者也可以使用。Linux:TensorFlow可以在各種版本的Linux操作系統(tǒng)中執(zhí)行。Android:在Android上運(yùn)行TensorFlow可以讓深度學(xué)習(xí)進(jìn)入移動(dòng)端,Android設(shè)備已達(dá)到十幾億臺(tái),設(shè)備的執(zhí)行性能也日益提升,越來越適合運(yùn)行TensorFlow。iOS:TensorFlow可以在iOS移動(dòng)設(shè)備或MacOS中執(zhí)行。RaspberryPi:樹莓派可以用于開發(fā)物聯(lián)網(wǎng)或機(jī)器人,提供人工智能功能。云端執(zhí)行:可以通過云端大量的服務(wù)器加速深度學(xué)習(xí)模型的訓(xùn)練。?TensorFlowDistributedExecutionEngine(分布式執(zhí)行引擎)在深度學(xué)習(xí)中,最花時(shí)間的就是模型的訓(xùn)練,尤其大型的深度學(xué)習(xí)模型必須使用大量數(shù)據(jù)進(jìn)行訓(xùn)練,需要數(shù)天乃至數(shù)周之久,TensorFlow具備分布式計(jì)算能力,可同時(shí)在數(shù)百臺(tái)機(jī)器上執(zhí)行訓(xùn)練模型,大幅縮短模型訓(xùn)練的時(shí)間。?前端程序語(yǔ)言TensorFlow可以使用多種前端程序語(yǔ)言,例如Python、C++等,但對(duì)Python的支持是最好的,Python具有程序代碼簡(jiǎn)明、易學(xué)習(xí)、高生產(chǎn)力的特質(zhì),面向?qū)ο?、函?shù)式的動(dòng)態(tài)語(yǔ)言,應(yīng)用非常廣泛。?高級(jí)APITensorFlow是比較低級(jí)的深度學(xué)習(xí)API,所以用程序設(shè)計(jì)模型時(shí)必須自行設(shè)計(jì):張量乘積、卷積等底層操作,好處是我們可以自行設(shè)計(jì)各種深度學(xué)習(xí)模型,但是缺點(diǎn)是開發(fā)時(shí)需要編寫更多程序代碼,并且需要花更多時(shí)間。所以網(wǎng)上的開發(fā)社區(qū)以TensorFlow為底層開發(fā)很多高級(jí)的深度學(xué)習(xí)API,例如Keras、TF-Learn、TF-Slim、TF-Layer等。這樣讓開發(fā)者使用更簡(jiǎn)潔、更可讀性的程序代碼就可以構(gòu)建出各種復(fù)雜的深度學(xué)習(xí)模型。本文主要介紹Keras,因?yàn)镵eras的功能最完整。3.2TensorFlow簡(jiǎn)介TensorFlow是由Tensor與Flow所組成的,說明如下:?Tensor(張量)在數(shù)學(xué)里,張量是一種幾何實(shí)體或廣義上的“數(shù)量”,在此“數(shù)量”包含“標(biāo)量、向量或矩陣”。零維的張量為標(biāo)量,一維的張量是向量,二維以上的張量是矩陣,如圖3-2所示。圖3-2?Flow(數(shù)據(jù)流)想象當(dāng)你到了一個(gè)陌生國(guó)度,你不會(huì)當(dāng)?shù)氐恼Z(yǔ)言,為了到達(dá)目的地,最好的方式是畫一張地圖,告訴司機(jī)你要去的目的地,司機(jī)則會(huì)按照你提供的地圖載你前往。TensorFlow也是相同的概念,為了讓TensorFlow可以支持不同的程序設(shè)計(jì)語(yǔ)言接口,并且讓TensorFlow程序可以在各種平臺(tái)執(zhí)行,所有的TensorFlow程序都是先建立“計(jì)算圖”(computationalgraph),這是張量運(yùn)算和數(shù)據(jù)處理的流程。我們可以使用TensorFlow提供的模塊以不同的程序設(shè)計(jì)語(yǔ)言建立“計(jì)算圖”。TensorFlow提供的模塊非常強(qiáng)大,我們可以設(shè)計(jì)張量運(yùn)算流程,并且構(gòu)建各種深度學(xué)習(xí)或機(jī)器學(xué)習(xí)模型。建立“計(jì)算圖”完成后,我們就可以在不同的平臺(tái)上執(zhí)行“計(jì)算圖”。如圖3-3所示,這是典型的“計(jì)算圖”,功能很簡(jiǎn)單,其算式為y=MatMul(x,w)+b(x、w、b都是張量,w與b先使用隨機(jī)數(shù)進(jìn)行初始化,使用MatMul將x與w進(jìn)行張量乘積,再加上b,最后結(jié)果是y)。圖3-3在上面的“計(jì)算圖”中:節(jié)點(diǎn)(Node)代表運(yùn)算,而邊(Edge)代表張量的數(shù)據(jù)流。我們可以想象邊就是管線,張量(數(shù)據(jù))在管線中流動(dòng),以上虛線代表數(shù)據(jù)流的方向。經(jīng)過節(jié)點(diǎn)運(yùn)算后,轉(zhuǎn)換為不同的張量(數(shù)據(jù))。圖3-3是靜態(tài)的,不太容易看到數(shù)據(jù)流動(dòng)的情況,可以訪問TensorFlow官方網(wǎng)站(https://www.TensorF/images/tensors_Flowing.gif),查看以動(dòng)畫顯示的“計(jì)算圖”數(shù)據(jù)的流動(dòng)。3.3TensorFlow程序設(shè)計(jì)模式如圖3-4所示,TensorFlow程序設(shè)計(jì)模式的核心是“計(jì)算圖”,可分為兩部分:建立“計(jì)算圖”與執(zhí)行“計(jì)算圖”。圖3-4圖3-4說明如下:(1)建立“計(jì)算圖”我們可以使用TensorFlow提供的模塊建立“計(jì)算圖”。TensorFlow提供的模塊非常強(qiáng)大,我們可以設(shè)計(jì)張量運(yùn)算流程,并且構(gòu)建各種深度學(xué)習(xí)或機(jī)器學(xué)習(xí)模型。(2)執(zhí)行“計(jì)算圖”建立“計(jì)算圖”后,我們就可以建立Session執(zhí)行“計(jì)算圖”了。在TensorFlow中,Session(原意為會(huì)話)的作用是在客戶端和執(zhí)行設(shè)備之間建立連接。有了這個(gè)連接,就可以將“計(jì)算圖”在各種不同設(shè)備中執(zhí)行,后續(xù)任何與設(shè)備之間的數(shù)據(jù)傳輸都必須通過Session來進(jìn)行,并且最后獲得執(zhí)行后的結(jié)果。3.4Keras介紹Keras是一個(gè)開放源碼的高級(jí)深度學(xué)習(xí)程序庫(kù),使用Python編寫,能夠運(yùn)行在TensorFlow或Theano之上。其主要作者和維護(hù)者是Google公司的工程師Fran?oisChollet,以MIT開放源碼方式授權(quán)。?為何需要使用KerasKeras使用最少的程序代碼、花費(fèi)最少的時(shí)間就可以建立深度學(xué)習(xí)模型,進(jìn)行訓(xùn)練、評(píng)估準(zhǔn)確率,并進(jìn)行預(yù)測(cè)。相對(duì)而言,使用TensorFlow這樣低級(jí)的鏈接庫(kù)雖然可以完全控制各種深度學(xué)習(xí)模型的細(xì)節(jié),但是需要編寫更多的程序代碼,花費(fèi)更多時(shí)間進(jìn)行開發(fā)。?Keras的工作方式Keras是一個(gè)模型級(jí)(model-level)的深度學(xué)習(xí)鏈接庫(kù),Keras只處理模型的建立、訓(xùn)練、預(yù)測(cè)等功能。深度學(xué)習(xí)底層的運(yùn)行,例如張量(矩陣)運(yùn)算,Keras必須配合“后端引擎”(backendengine)進(jìn)行運(yùn)算。目前Keras提供了兩種后端引擎:Theano與TensorFlow。如圖3-5所示,Keras程序員只需要專注于建立模型,至于底層操作細(xì)節(jié),例如張量(矩陣)運(yùn)算,Keras會(huì)幫你轉(zhuǎn)化為Theano或TensorFlow相對(duì)指令。圖3-5本文介紹的Keras范例都是使用TensorFlow作為后端引擎的,因?yàn)槭且訲ensorFlow作為底層,所以之前章節(jié)中所介紹的TensorFlow的好處(例如跨平臺(tái)與執(zhí)行性能)就都具備了。?Keras深度學(xué)習(xí)鏈接庫(kù)特色簡(jiǎn)單快速地建立原型prototyping:Keras具備友好的用戶界面、模塊化設(shè)計(jì)、可擴(kuò)充性。已經(jīng)內(nèi)建各種類神經(jīng)網(wǎng)絡(luò)層級(jí),例如卷積層CNN、RNN,可以幫助我們快速建立神經(jīng)網(wǎng)絡(luò)模型。通過后端引擎Theano與TensorFlow,可以在CPU與GPU上運(yùn)行。以Keras開發(fā)的程序代碼更簡(jiǎn)潔、可讀性更高、更容易維護(hù)、更具生產(chǎn)力。Keras的說明文件非常齊全,官方網(wǎng)站上提供的范例也非常淺顯易懂。3.5Keras程序設(shè)計(jì)模式英文成語(yǔ)“pieceofcake”的意思是“非常容易的事”,其實(shí)Keras的程序設(shè)計(jì)模式建立一個(gè)深度學(xué)習(xí)模型很簡(jiǎn)單,就好像做一個(gè)多層蛋糕。首先,建立一個(gè)蛋糕架。然后,我們不需要自己做每一層蛋糕,可以選擇現(xiàn)成的蛋糕層,例如水果蛋糕層、巧克力蛋糕層等。我們可以指定每一層的“內(nèi)容”,例如指定裝飾水果種類與數(shù)量。只需要將每一層蛋糕加入蛋糕架上即可。最后就可以做出一個(gè)好吃又美觀的多層蛋糕。如圖3-6所示,我們將建立多層感知器(MultilayerPerceptron)模型,輸入層(x)共有784個(gè)神經(jīng)元,隱藏層(h)共有256個(gè)神經(jīng)元,輸出層(y)共有10個(gè)神經(jīng)元。建立這樣的模型很簡(jiǎn)單,只需先建立一個(gè)蛋糕架,然后將神經(jīng)網(wǎng)絡(luò)層一層一層加上去即可。圖3-6如圖3-7所示,我們可以很簡(jiǎn)單地使用下列程序代碼將“輸入層”“隱藏層”與“輸出層”加入模型中。圖3-7可以看出,在Keras建立多層感知器很簡(jiǎn)單。1.建立Sequential模型Sequential模型是多個(gè)神經(jīng)網(wǎng)絡(luò)層的線性堆疊。我們可以想象Sequential模型是一個(gè)蛋糕架,接下來可以加入一層一層的蛋糕。2.加入“輸入層”與“隱藏層”到模型中Keras已經(jīng)內(nèi)建各種神經(jīng)網(wǎng)絡(luò)層(例如Dense層、Conv2d層等),只要在之前建立的模型上加入我們選擇的神經(jīng)網(wǎng)絡(luò)層就可以了(就好像在“蛋糕架”加入“蛋糕層”一樣簡(jiǎn)單)。以下程序代碼加入“輸入層”與“隱藏層”到模型中,就好像加入兩層蛋糕。3.加入“輸出層”到模型以下程序代碼加入“輸出層”到模型中,就好像再加入一層蛋糕。以上基本就完成了多層感知器模型的建立,是不是很簡(jiǎn)單呢?這里只介紹了Keras程序設(shè)計(jì)的概念,詳細(xì)程序代碼的解說在后面章節(jié)會(huì)陸續(xù)介紹。3.6Keras與TensorFlow比較Keras與TensorFlow比較見表3-1。表3-1Keras與TensorFlow比較?輕松學(xué)會(huì)“深度學(xué)習(xí)”:先學(xué)Keras再學(xué)TensorFlow初學(xué)者學(xué)習(xí)TensorFlow,就好像沒有任何攝影經(jīng)驗(yàn)的人一開始就使用單反相機(jī)且使用M(手動(dòng))模式,必須學(xué)習(xí)一大堆有關(guān)光圈、快門等的知識(shí),研究了老半天,還是沒辦法拍出一張像樣的照片,會(huì)有很大的挫感。初學(xué)者學(xué)習(xí)Keras,就好像單反相機(jī)的初學(xué)者先以Auto自動(dòng)模式來學(xué)習(xí)界面的構(gòu)圖等,這樣就可以很容易地拍出一張張照片,再慢慢地使用P模式、A模式、S模式等,學(xué)習(xí)步驟自行設(shè)定,最后就可以使用M模式,完全掌控了。本文希望能讓初學(xué)者很輕松地學(xué)會(huì)“深度學(xué)習(xí)”,所以會(huì)先介紹Keras再介紹TensorFlow。因?yàn)榇蟛糠肿x者沒有接觸過深度學(xué)習(xí)模型,如果一開始就學(xué)習(xí)TensorFlow,就要面對(duì)TensorFlow特殊的程序設(shè)計(jì)模式,并且還必須自行設(shè)計(jì)張量(矩陣)的運(yùn)算,會(huì)有很大的挫折感。而先學(xué)習(xí)Keras可以讓讀者很容易地建立深度學(xué)習(xí)模型,并且訓(xùn)練模型,使用模型進(jìn)行預(yù)測(cè)。等讀者對(duì)深度學(xué)習(xí)模型有了一定認(rèn)識(shí)后,再來學(xué)習(xí)TensorFlow就不會(huì)感覺那么困難了。3.7結(jié)論本章我們介紹了TensorFlow與Keras的功能,并分別介紹了它們的程序設(shè)計(jì)模式。后續(xù)章節(jié)將介紹TensorFlow與Keras的安裝,讀者可以自行決定要使用Windows或Linux操作系統(tǒng),我們將在第4章介紹Windows安裝,在第5章介紹LinuxUbuntu安裝。第4章在Windows中安裝TensorFlow與Keras本章將介紹在Windows系統(tǒng)中安裝TensorFlow與Keras,并且啟動(dòng)JupyterNotebook查看TensorFlow與Keras的版本。新版本的TensorFlow可以在Windows系統(tǒng)中安裝,為用戶帶來很大的方便,畢竟大部分用戶使用的都是Windows操作系統(tǒng)。在TensorFlow官方網(wǎng)站介紹了很多安裝TensorFlow的方式,網(wǎng)址如下:https://www.tensorF/versions/r0.10/get_started/os_setup本文只介紹最簡(jiǎn)單的安裝方式,就是以Anaconda安裝。安裝TensorFlow必須安裝Python。而安裝Python最方便的方式就是使用軟件包來安裝。Anaconda是一個(gè)Python發(fā)行版,其中包含大量的標(biāo)準(zhǔn)數(shù)學(xué)和科學(xué)計(jì)算軟件包。安裝Anaconda軟件包時(shí)會(huì)同時(shí)幫我們安裝很多軟件包,包括JupyterNotebook、NumPy、SciPy、Matplotlib、Pandas這5個(gè)用于數(shù)據(jù)分析、科學(xué)計(jì)算的常用軟件包。4.1安裝Anaconda安裝Anaconda的步驟如下。下載Anaconda網(wǎng)址。先打開瀏覽器,輸入下列網(wǎng)址,顯示出如圖4-1所示的網(wǎng)頁(yè):https://www.continuum.io/downloads圖4-1運(yùn)行下載后的Anaconda,如圖4-2所示。圖4-2單擊Next按鈕,如圖4-3所示。圖4-3單擊IAgree按鈕,如圖4-4所示。圖4-4單擊Next按鈕,如圖4-5所示。圖4-5設(shè)置安裝目錄,如圖4-6所示。圖4-6設(shè)置Anaconda,如圖4-7所示。圖4-7安裝完成,如圖4-8所示。圖4-84.2啟動(dòng)命令提示符在Linux系統(tǒng)我們會(huì)使用“終端”程序輸入命令,在Windows系統(tǒng)我們將使用“命令提示符”程序來輸入命令。啟動(dòng)命令提示符程序,如圖4-9所示。圖4-9打開命令提示符窗口,如圖4-10所示。在命令提示符窗口中可以輸入命令。注意,命令提示符界面默認(rèn)的輸入法是微軟的拼音輸入法,按Ctrl+【空格】組合鍵可切換為英文輸入法,再輸入命令。圖4-10設(shè)置命令提示符窗口,如圖4-11所示。因?yàn)橛?jì)算機(jī)屏幕上默認(rèn)的“黑底白字”在書上印刷看起來不清楚,所以后續(xù)會(huì)改為“白底黑字”。單擊菜單圖標(biāo),選擇“屬性”選項(xiàng)開始進(jìn)行設(shè)置。圖4-11設(shè)置命令提示符的背景顏色,如圖4-12所示。圖4-12設(shè)置命令提示符的文字顏色,如圖4-13所示。圖4-13設(shè)置完成后的命令提示符窗口,如圖4-14所示。圖4-14上面的屏幕顯示界面出現(xiàn)后,命令提示符就是用戶的目錄。我們可以在此輸入命令。4.3建立TensorFlow的Anaconda虛擬環(huán)境為什么要使用Anaconda虛擬環(huán)境安裝TensorFlow?因?yàn)樵谝慌_(tái)計(jì)算機(jī)中,我們常常需要安裝很多軟件,但是每個(gè)軟件所需要的Python的關(guān)聯(lián)模塊或版本都不相同。例如,我們要使用Python開發(fā)網(wǎng)站系統(tǒng),安裝的網(wǎng)站框架可能需要Python3.x的版本,但是要安裝TensorFlow需要Python3.5的版本,此時(shí)就會(huì)發(fā)生版本不一致的問題。為了解決這個(gè)問題,我們可以使用Anaconda虛擬環(huán)境來安裝,讓網(wǎng)站框架與TensorFlow分別安裝在不同的虛擬環(huán)境中,這樣就不會(huì)有版本不一致的問題了。另外,本文會(huì)分別介紹如何使用CPU與GPU執(zhí)行TensorFlow與Keras。然而,CPU與GPU所需要安裝的TensorFlow版本不一樣,所以我們會(huì)分別建立CPU與GPU的虛擬環(huán)境,方便后續(xù)測(cè)試CPU與GPU的執(zhí)行性能。1.建立工作目錄在命令提示符窗口輸入下列命令:?建立并且切換到工作目錄執(zhí)行后屏幕顯示界面如圖4-15所示。圖4-152.建立Anaconda虛擬環(huán)境下面使用conda命令建立一個(gè)新的Python3.5Anaconda虛擬環(huán)境,我們將虛擬環(huán)境命名為TensorFlow。這個(gè)虛擬環(huán)境將用來安裝TensorFlow的CPU版本。在命令提示符窗口輸入下列命令:?建立TensorFlowAnaconda虛擬環(huán)境以上命令說明見表4-1。表4-1命令說明執(zhí)行后屏幕顯示界面如圖4-16所示。圖4-16按Y鍵之后,就會(huì)開始安裝Anaconda虛擬環(huán)境,并且安裝各個(gè)軟件包。安裝完成后屏幕顯示界面如圖4-17所示。圖4-173.啟動(dòng)Anaconda虛擬環(huán)境建立TensorFlow的Anaconda虛擬環(huán)境后,就可以啟動(dòng)這個(gè)虛擬環(huán)境了。在命令提示符窗口輸入下列命令:?啟動(dòng)Anaconda虛擬環(huán)境執(zhí)行后屏幕顯示界面如圖4-18所示。圖4-184.關(guān)閉TensorFlow的Anaconda虛擬環(huán)境當(dāng)我們不再使用TensorFlow的Anaconda虛擬環(huán)境后,就可以關(guān)閉此虛擬環(huán)境??稍诿钐崾痉翱谳斎胂铝忻睿?關(guān)閉Anaconda虛擬環(huán)境執(zhí)行后屏幕顯示界面如圖4-19所示。圖4-194.4在Anaconda虛擬環(huán)境安裝TensorFlow與Keras之前已經(jīng)建立了Anaconda虛擬環(huán)境,現(xiàn)在要在此虛擬環(huán)境中安裝TensorFlow與Keras。1.啟動(dòng)Anaconda虛擬環(huán)境安裝TensorFlow與Keras前,先啟動(dòng)TensorFlow的Anaconda虛擬環(huán)境。在命令提示字符窗口輸入下列命令:?啟動(dòng)Anaconda虛擬環(huán)境執(zhí)行后屏幕顯示界面如圖4-20所示。圖4-202.安裝TensorFlow在命令提示符窗口中輸入下列命令:?安裝TensorFlowCPU版本執(zhí)行后屏幕顯示界面如圖4-21所示。圖4-213.安裝Keras在命令提示符窗口輸入下列命令:?安裝Keras執(zhí)行后屏幕顯示界面如圖4-22所示。圖4-224.5啟動(dòng)JupyterNotebook之前已經(jīng)在Anaconda虛擬環(huán)境安裝了TensorFlow與Keras,現(xiàn)在我們要在JupyterNotebook查看TensorFlow與Keras的版本。JupyterNotebook具備交互式界面,在Web界面輸入Python命令后,可以立刻看到結(jié)果。我們還可以將數(shù)據(jù)分析的過程、執(zhí)行后的命令與結(jié)果存儲(chǔ)成筆記本。下次打開筆記本時(shí),可以重新執(zhí)行這些命令。JupyterNotebook筆記本可以包含文字、數(shù)學(xué)公式、程序代碼、結(jié)果、圖形和視頻。因?yàn)镴upyterNotebook是功能強(qiáng)大的交互式界面,所以在后續(xù)章節(jié)介紹的范例程序也會(huì)使用JupyterNotebook示范TensorFlow與Keras指令。1.啟動(dòng)JupyterNotebook在4.3節(jié),當(dāng)我們建立TensorFlow的Anaconda虛擬環(huán)境時(shí),也同時(shí)安裝了JupyterNotebook,所以不需要再安裝,直接啟動(dòng)即可。啟動(dòng)JupyterNotebook時(shí)先確認(rèn):(1)切換至工作目錄,后續(xù)JupyterNotebook讀取與存盤都會(huì)在此工作目錄。(2)確認(rèn)已經(jīng)啟動(dòng)TensorFlow的Anaconda虛擬環(huán)境,因?yàn)槲覀冎鞍惭bTensorFlow與Keras是在虛擬環(huán)境中,如果尚未啟動(dòng)這個(gè)虛擬環(huán)境就打開JupyterNotebook,那么執(zhí)行TensorFlow與Keras程序時(shí)會(huì)出現(xiàn)ModuleNotFoundError錯(cuò)誤。在命令提示符窗口輸入下列命令:?切換工作目錄?啟動(dòng)Anaconda虛擬環(huán)境?啟動(dòng)JupyterNotebook執(zhí)行后屏幕顯示界面如圖4-23所示。在圖4-23所示的運(yùn)行界面中,輸入JupyterNotebook并按Enter鍵后,就會(huì)自動(dòng)打開JupyterNotebook的Web界面。圖4-232.建立新的Notebook進(jìn)入JupyterNotebook界面后,可以按照如圖4-24所示的步驟新建NoteBook。圖4-24新建JupyterNotebook后會(huì)打開瀏覽器新的頁(yè)面,NoteBook默認(rèn)的名稱是Untitled,我們可以單擊Untitled來修改NoteBook的名稱,如圖4-25所示。圖4-25輸入新的名稱,然后單擊OK按鈕,如圖4-26所示。圖4-263.JupyterNotebook輸入命令的方式在JupyterNotebook的Cell(程序單元格)中輸入程序代碼,然后按Shift+Enter或Ctrl+Enter組合鍵來執(zhí)行程序代碼。這兩種方式的差異如下。Shift+Enter:執(zhí)行后,光標(biāo)會(huì)移到下一個(gè)程序單元格。Ctrl+Enter:執(zhí)行后,光標(biāo)仍在當(dāng)前的程序單元格。4.導(dǎo)入TensorFlow模塊在程序單元格輸入下列命令,然后按Shift+Enter組合鍵,執(zhí)行程序代碼:?導(dǎo)入TensorFlow模塊,后續(xù)以tf來引用這個(gè)模塊執(zhí)行結(jié)果如圖4-27所示。圖4-27以上命令執(zhí)行后,并沒有任何輸出(沒有消息就是好消息),代表導(dǎo)入TensorFlow模塊沒有任何問題。如果TensorFlow安裝有問題,就會(huì)顯示錯(cuò)誤信息。5.查看TensorFlow版本接下來,我們就可以查看TensorFlow版本了。在程序單元格輸入下列命令:?查看TensorFlow版本執(zhí)行結(jié)果如圖4-28所示。圖4-28JupyterNotebook執(zhí)行后屏幕顯示界面如圖4-29所示。圖4-296.導(dǎo)入Keras模塊在JupyterNotebook的程序單元格輸入程序代碼。?導(dǎo)入Keras模塊執(zhí)行結(jié)果如圖4-30所示。圖4-30因?yàn)橐呀?jīng)同時(shí)安裝了Keras與TensorFlow,所以導(dǎo)入Keras模塊后,我們可以看到Keras自動(dòng)以TensorFlow作為Backend(后端)。7.查看Keras版本在JupyterNotebook的程序單元格輸入如圖4-31所示的程序代碼,查看Keras版本。圖4-31以上執(zhí)行結(jié)果顯示Keras版本是2.0.2。8.保存Notebook當(dāng)要退出Notebook時(shí),記得保存,如圖4-32所示。圖4-329.關(guān)閉Notebook保存完成后,就可以關(guān)閉Notebook網(wǎng)頁(yè),步驟如圖4-33所示。圖4-3310.打開之前保存的NoteBook回到Jupyter網(wǎng)頁(yè),我們可以看到之前保存的test.ipynb。如果要再次打開這個(gè)Notebook,單擊即可,如圖4-34所示。圖4-3411.關(guān)閉Jupyter瀏覽器(見圖4-35)圖4-3512.關(guān)閉JupyterNotebook關(guān)閉瀏覽器后,回到命令提示符窗口,按Ctrl+C組合鍵即可關(guān)閉JupyterNotebook程序,如圖4-36所示。圖4-364.6結(jié)論本章我們介紹了如何在Windows中安裝TensorFlow與Keras,并且介紹了如何打開JupyterNotebook查看TensorFlow與Keras版本。我們將在第5章介紹如何在LinuxUbuntu中安裝TensorFlow與Keras。第5章在LinuxUbuntu中安裝TensorFlow與KerasLinux操作系統(tǒng)是大數(shù)據(jù)分析與機(jī)器學(xué)習(xí)很常用的平臺(tái)。而Ubuntu是眾多Linux操作系統(tǒng)版本中的一種,是一個(gè)開放源碼、功能強(qiáng)大而且免費(fèi)的操作系統(tǒng)。本文特別介紹在LinuxUbuntu操作系統(tǒng)中安裝TensorFlow1.0+Keras2.0。本文假設(shè)讀者已經(jīng)安裝了LinuxUbuntu操作系統(tǒng),如果需要安裝Ubuntu系統(tǒng)有關(guān)的資料,可以在網(wǎng)上找到詳細(xì)的安裝步驟,也可以參考筆者的另一本文《Python+Spark2.0+Hadoop機(jī)器學(xué)習(xí)與大數(shù)據(jù)實(shí)戰(zhàn)》,書中有詳細(xì)的安裝說明。5.1安裝Anaconda安裝Anaconda的步驟如下。復(fù)制安裝Anaconda的下載網(wǎng)址。在瀏覽器輸入下列網(wǎng)址。?連接到continuum網(wǎng)址向下瀏覽,我們可以看到AnacondaforLinux,按照?qǐng)D5-1所示的步驟進(jìn)行操作。圖5-1下載Anaconda3-4.2.0-Linux-x86_64.sh。先在“終端”程序輸入wget再按【空格】鍵,然后按Ctrl+Shift+V組合鍵來粘貼之前所復(fù)制的網(wǎng)址,如圖5-2所示。圖5-2安裝Anaconda。在“終端”程序輸入下列命令,執(zhí)行Anaconda3-4.2.0-Linux-x86_64.sh。執(zhí)行后屏幕顯示界面如圖5-3所示。圖5-3以上指令加上“-b”是batch處理安裝,會(huì)自動(dòng)省略。閱讀License條款,并自動(dòng)安裝到路徑/home/hduser/anaconda2下。編輯~/.bashrc加入模塊路徑??梢栽凇敖K端”程序中輸入下列命令編輯~/.bashrc:打開編輯器屏幕顯示界面,輸入如圖5-4所示的內(nèi)容,輸入完成后單擊“保存”按鈕。圖5-4使得~/.bashrc的修改生效。我們可以通過重新注銷再登錄,或使用下列命令讓用戶環(huán)境變量的設(shè)置生效(見圖5-5):圖5-5查看Python版本??梢栽凇敖K端”程序中輸入下列命令:執(zhí)行后屏幕顯示界面如圖5-6所示,我們可以看到版本是Anaconda4.2.0。圖5-65.2安裝TensorFlow與Keras安裝TensorFlow與Keras的步驟如下。安裝TensorFlow。在“終端”程序中輸入下列命令。?安裝TensorFlow(見圖5-7)圖5-7安裝Keras。在“終端”程序中輸入下列命令。?安裝Keras(見圖5-8)圖5-85.3啟動(dòng)JupyterNotebook之前已經(jīng)在UbuntuLinux系統(tǒng)中安裝了TensorFlow與Keras,現(xiàn)在我們要在JupyterNotebook中查看TensorFlow與Keras的版本。安裝Anaconda時(shí),也同時(shí)安裝了JupyterNotebook,所以不需要再單獨(dú)安裝,直接啟動(dòng)即可。建立ipynotebook的工作目錄??梢栽凇敖K端”程序中輸入下列命令,建立并切換到ipynotebook工作目錄。按Enter鍵后,屏幕顯示如圖5-9所示。圖5-9進(jìn)入JupyterNotebook。進(jìn)入工作目錄后,在“終端”程序中輸入下列命令,進(jìn)入JupyterNotebook:按Enter鍵后,就會(huì)啟動(dòng)瀏覽器,默認(rèn)的網(wǎng)址是http://localhost:8888,JupyterNotebook的界面如圖5-10所示。圖5-10啟動(dòng)JupyterNotebook。進(jìn)入JupyterNotebook界面,如圖5-11所示。關(guān)于JupyterNotebook的簡(jiǎn)易使用說明,可參考4.5節(jié)的內(nèi)容。圖5-115.4結(jié)論本章介紹了如何在LinuxUbuntu中安裝TensorFlow與Keras,并且介紹了如何打開JupyterNotebook來查看TensorFlow與Keras版本。從下一章開始,我們將開始使用Keras來設(shè)計(jì)程序。第6章KerasMNIST手寫數(shù)字識(shí)別數(shù)據(jù)集本章將介紹MNIST手寫數(shù)字識(shí)別數(shù)據(jù)集,這是由YannLeCun所搜集的,他也是ConvolutionNeuralNetworks的創(chuàng)始人。MNIST數(shù)字文字識(shí)別數(shù)據(jù)集數(shù)據(jù)量不會(huì)太多,而且是單色的圖像,比較簡(jiǎn)單,很適合深度學(xué)習(xí)的初學(xué)者用來練習(xí)建立模型、訓(xùn)練、預(yù)測(cè)。MNIST數(shù)據(jù)集共有訓(xùn)練數(shù)據(jù)60000項(xiàng)、測(cè)試數(shù)據(jù)10000項(xiàng)。MNIST數(shù)據(jù)集中的每一項(xiàng)數(shù)據(jù)都由images(數(shù)字圖像)與labels(真實(shí)的數(shù)字)所組成,如圖6-1所示。圖6-1有關(guān)本章的完整程序代碼參考范例程序Keras_Mnist_Introduce.ipynb。范例程序的下載與安裝參考本文附錄A。6.1下載MNIST數(shù)據(jù)我們將創(chuàng)建以下Keras程序,下載并讀取MNIST數(shù)據(jù)。1.導(dǎo)入Keras及相關(guān)模塊因?yàn)槲覀円呀?jīng)同時(shí)安裝了Keras與TensorFlow,所以導(dǎo)入Keras模塊后,可以看到Keras自動(dòng)以TensorFlow作為Backend。程序代碼說明見表6-1。表6-1程序代碼說明2.導(dǎo)入Keras模塊Keras已經(jīng)提供了現(xiàn)成的模塊,可以幫我們下載并讀取MNIST數(shù)據(jù),所以先導(dǎo)入MNIST模塊。3.第一次進(jìn)行MNIST數(shù)據(jù)的下載第一次執(zhí)行mnist.load_data()方法,程序會(huì)檢查用戶目錄下是否已經(jīng)有MNIST數(shù)據(jù)集文件,如果還沒有,就會(huì)下載文件。以下是第一次下載文件的屏幕顯示界面,因?yàn)楸仨氁螺d文件,所以運(yùn)行時(shí)間會(huì)比較長(zhǎng)。4.查看下載的MNIST數(shù)據(jù)文件查看下載的MNIST數(shù)據(jù)文件,根據(jù)所使用的環(huán)境是Windows或LinuxUbuntu會(huì)有所不同,說明如下。?在Windows下查看已下載的MNIST數(shù)據(jù)文件MNIST數(shù)據(jù)文件下載后會(huì)存儲(chǔ)在用戶個(gè)人的文件夾中,因?yàn)楣P者的用戶名稱是kevin,所以下載后會(huì)存儲(chǔ)在目錄C:\Users\kevin\.keras\datasets中,文件名是mnist.npz,如圖6-2所示。我們也可以使用文件資源管理器來查看。圖6-2?在LinuxUbuntu下查看已下載的MNIST數(shù)據(jù)文件下載完成后,可以輸入下列指令查看目錄(見圖6-3):圖6-35.讀取MNIST數(shù)據(jù)當(dāng)再次執(zhí)行mnist.load_data()時(shí),由于之前已經(jīng)下載了文件,因此不需要再進(jìn)行下載,只需要讀取文件,這樣運(yùn)行速度就會(huì)快很多。6.查看MNIST數(shù)據(jù)下載后,可以使用下列指令查看MNIST數(shù)據(jù)集的數(shù)據(jù)項(xiàng)數(shù)。從以上執(zhí)行結(jié)果可知,數(shù)據(jù)分為兩部分:train訓(xùn)練數(shù)據(jù)60000項(xiàng)。test測(cè)試數(shù)據(jù)10000項(xiàng)。6.2查看訓(xùn)練數(shù)據(jù)先查看訓(xùn)練數(shù)據(jù)。1.訓(xùn)練數(shù)據(jù)是由images與labels所組成的images與labels共60000項(xiàng),images是單色的數(shù)字圖像,labels是數(shù)字圖像的真實(shí)值,如圖6-4所示。圖6-42.定義plot_image函數(shù)顯示數(shù)字圖像為了能夠顯示images數(shù)字圖像,我們創(chuàng)建下列plot_image函數(shù)。以上程序代碼說明見表6-2。表6-2程序代碼說明3.執(zhí)行plot_image函數(shù)查看第0個(gè)數(shù)字圖像以下程序調(diào)用plot_image函數(shù)傳入mnist.train.images[0],也就是訓(xùn)練數(shù)據(jù)集的第0項(xiàng)數(shù)據(jù),從顯示結(jié)果可以看到這是一個(gè)數(shù)字5的圖形。4.查看第0項(xiàng)label數(shù)據(jù)第0項(xiàng)label數(shù)據(jù)是第0個(gè)數(shù)字圖像的真實(shí)值,所以是5。6.3查看多項(xiàng)訓(xùn)練數(shù)據(jù)images與label接下來,我們將創(chuàng)建plot_images_labels_prediction函數(shù),可以顯示多項(xiàng)MNIST數(shù)據(jù)的images與label。1.創(chuàng)建plot_images_labels_prediction()函數(shù)我們希望能很方便地查看數(shù)字圖形、真實(shí)的數(shù)字與預(yù)測(cè)結(jié)果,因此創(chuàng)建了下列函數(shù)。?導(dǎo)入pyplot模塊,后續(xù)會(huì)使用plt來引用?定義plot_images_labels_prediction()函數(shù)定義plot_images_labels_prediction()函數(shù)需要傳入下列參數(shù):images(數(shù)字圖像)、label(真實(shí)值)、prediction(預(yù)測(cè)結(jié)果)、idx(開始顯示的數(shù)據(jù)index)、num(要顯示的數(shù)據(jù)項(xiàng)數(shù),默認(rèn)是10,不超過25)。?設(shè)置顯示圖形的大小?如果顯示項(xiàng)數(shù)參數(shù)大于25,就設(shè)置為25,以免發(fā)生錯(cuò)誤?for循環(huán)執(zhí)行程序塊內(nèi)的程序代碼,畫出num個(gè)數(shù)字圖形查看以上程序代碼時(shí)可參考注釋。?開始畫圖2.查看訓(xùn)練數(shù)據(jù)前10項(xiàng)數(shù)據(jù)執(zhí)行plot_images_labels_prediction()函數(shù)顯示前10項(xiàng)訓(xùn)練數(shù)據(jù)。輸入x_test_image和y_test_label,不過,目前還沒有預(yù)測(cè)結(jié)果(prediction),所以傳入空l(shuí)ist[],從第0項(xiàng)數(shù)據(jù)開始一直顯示到第9項(xiàng)數(shù)據(jù)。3.查看test測(cè)試數(shù)據(jù)查看test測(cè)試數(shù)據(jù)項(xiàng)數(shù),我們可以看到共計(jì)10000項(xiàng)數(shù)據(jù)。4.顯示test測(cè)試數(shù)據(jù)執(zhí)行plot_images_labels_prediction顯示前10項(xiàng)測(cè)試數(shù)據(jù)。6.4多層感知器模型數(shù)據(jù)預(yù)處理在下一章,我們將建立多層感知器模型(MultilayerPerceptron),必須先將images與label的內(nèi)容進(jìn)行預(yù)處理,才能使用多層感知器模型進(jìn)行訓(xùn)練與預(yù)測(cè)。數(shù)據(jù)預(yù)處理分為以下兩部分。features(數(shù)字圖像的特征值)數(shù)據(jù)預(yù)處理:將在6.5節(jié)說明label(數(shù)字圖像真實(shí)的值)數(shù)據(jù)預(yù)處理:將在6.6節(jié)說明。6.5features數(shù)據(jù)預(yù)處理features(數(shù)字圖像的特征值)數(shù)據(jù)預(yù)處理可分為下列兩個(gè)步驟:(1)將原本28×28的數(shù)字圖像以reshape轉(zhuǎn)換為一維的向量,其長(zhǎng)度是784,并且轉(zhuǎn)換為Float。(2)數(shù)字圖像image的數(shù)字標(biāo)準(zhǔn)化。查看image的shape??梢杂孟铝兄噶畈榭疵恳粋€(gè)數(shù)字圖像的shape是28×28。將image以reshape轉(zhuǎn)換。下面的程序代碼將原本28×28的二維數(shù)字圖像以reshape轉(zhuǎn)換為一維的向量,再以astype轉(zhuǎn)換為Float,共784個(gè)浮點(diǎn)數(shù)。查看轉(zhuǎn)換為一維向量的shape??梢杂孟铝兄噶畈榭疵恳粋€(gè)數(shù)字圖像是784個(gè)浮點(diǎn)數(shù)。查看images圖像的內(nèi)容。查看images第0項(xiàng)的內(nèi)容。從以上執(zhí)行結(jié)果可知,大部分都是0,少部分是數(shù)字。每一個(gè)數(shù)字都是從0到255的值,代表圖形每一個(gè)點(diǎn)灰度的深淺。將數(shù)字圖像images的數(shù)字標(biāo)準(zhǔn)化。images的數(shù)字標(biāo)準(zhǔn)化可以提高后續(xù)訓(xùn)練模型的準(zhǔn)確率,因?yàn)閕mages的數(shù)字是從0到255的值,所以最簡(jiǎn)單的標(biāo)準(zhǔn)化方式是除以255。查看數(shù)字圖像images數(shù)字標(biāo)準(zhǔn)化后的結(jié)果。使用下列指令查看數(shù)字圖像images的數(shù)字標(biāo)準(zhǔn)化后的結(jié)果,都介于0與1之間。6.6label數(shù)據(jù)預(yù)處理label(數(shù)字圖像真實(shí)的值)標(biāo)簽字段原本是0~9的數(shù)字,必須以O(shè)ne-HotEncoding(一位有效編碼)轉(zhuǎn)換為10個(gè)0或1的組合,例如數(shù)字7經(jīng)過One-HotEncoding轉(zhuǎn)換后是0000000100,正好對(duì)應(yīng)輸出層的10個(gè)神經(jīng)元。查看原本的label標(biāo)簽字段。以下列指令來查看訓(xùn)練數(shù)據(jù)label標(biāo)簽字段的前5項(xiàng)訓(xùn)練數(shù)據(jù),我們可以看到這是0~9的數(shù)字。label標(biāo)簽字段進(jìn)行One-HotEncoding轉(zhuǎn)換。下面的程序代碼使用np_utils.to_categorical分別傳入?yún)?shù)y_train_label(訓(xùn)練數(shù)據(jù))與y_test_label(測(cè)試數(shù)據(jù))的label標(biāo)簽字段,進(jìn)行One-HotEncoding轉(zhuǎn)換。查看進(jìn)行One-HotEncoding轉(zhuǎn)換之后的label標(biāo)簽字段。進(jìn)行One-HotEncoding轉(zhuǎn)換之后,查看訓(xùn)練數(shù)據(jù)label標(biāo)簽字段的前5項(xiàng)數(shù)據(jù),我們可以看到轉(zhuǎn)換后的結(jié)果。參考上面的結(jié)果,例如第1項(xiàng)數(shù)據(jù),原來的真實(shí)值是5,進(jìn)行One-HotEncoding轉(zhuǎn)換后,只有第5個(gè)數(shù)字(由0算起)是1,其余都是0。6.7結(jié)論在本章中,我們已經(jīng)介紹了如何使用Keras下載并且讀取MNIST數(shù)據(jù)集,并介紹了MNIST數(shù)據(jù)集的特色,也完成了數(shù)據(jù)的預(yù)處理。在下一章,我們可以使用Keras建立多層感知器模型進(jìn)行訓(xùn)練,并且使用模型進(jìn)行預(yù)測(cè)。第7章Keras多層感知器識(shí)別手寫數(shù)字本章將介紹用Keras建立多層感知器模型,然后訓(xùn)練模型、評(píng)估模型的準(zhǔn)確率,最后使用訓(xùn)練完成的模型識(shí)別MNIST手寫數(shù)字。關(guān)于多層感知器模型的詳細(xì)介紹,可參考第2章。有關(guān)本章的完整程序代碼可參考范例程序Keras_Mnist_MLP_h256.ipynb。范例程序的下載與安裝可參考本文附錄A。7.1Keras多元感知器識(shí)別MNIST手寫數(shù)字圖像的介紹1.多層感知器模型的介紹為了能夠識(shí)別MNIST手寫數(shù)字圖像,我們將建立如圖7-1所示的多層感知器模型。圖7-12.多層感知器的訓(xùn)練與預(yù)測(cè)建立如圖7-2所示的多層感知器模型后,必須先訓(xùn)練模型才能夠進(jìn)行預(yù)測(cè)(識(shí)別)這些手寫數(shù)字。圖7-2以多層感知器模型識(shí)別MNIST數(shù)字圖像可分為訓(xùn)練與預(yù)測(cè)。?訓(xùn)練MNIST數(shù)據(jù)集的訓(xùn)練數(shù)據(jù)共60000項(xiàng),經(jīng)過數(shù)據(jù)預(yù)處理后會(huì)產(chǎn)生Features(數(shù)字圖像特征值)與Label(數(shù)字真實(shí)的值),然后輸入多層感知器模型進(jìn)行訓(xùn)練,訓(xùn)練完成的模型就可以作為下一階段預(yù)測(cè)使用。?預(yù)測(cè)輸入數(shù)字圖像,預(yù)處理后會(huì)產(chǎn)生Features(數(shù)字圖像特征值),使用訓(xùn)練完成的多層感知器模型進(jìn)行預(yù)測(cè),最后產(chǎn)生預(yù)測(cè)結(jié)果是0~9的數(shù)字。3.建立多層感知器模型的步驟多層感知器識(shí)別MNIST數(shù)據(jù)集中的手寫數(shù)字的步驟說明如圖7-3所示。圖7-37.2進(jìn)行數(shù)據(jù)預(yù)處理有關(guān)讀取MNIST數(shù)據(jù)集數(shù)據(jù)并且進(jìn)行數(shù)據(jù)預(yù)處理的詳細(xì)介紹可參考第6章。導(dǎo)入所需模塊。讀取MNIST數(shù)據(jù)。將features(數(shù)字圖像特征值)使用reshape轉(zhuǎn)換。下面的程序代碼將原本28×28的數(shù)字圖像以reshape轉(zhuǎn)換成784個(gè)Float數(shù)。將features(數(shù)字圖像特征值)標(biāo)準(zhǔn)化。將features(數(shù)字圖像特征值)標(biāo)準(zhǔn)化可以提高模型預(yù)測(cè)的準(zhǔn)確度,并且更快收斂。label(數(shù)字真實(shí)的值)以O(shè)ne-HotEncoding進(jìn)行轉(zhuǎn)換。使用np

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論