Keras 教程: Python 深度學習終極入門指南

2021-02-08 Python程式設計師

Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。


在這篇 Keras 教程中, 你將學到如何用 Python 建立一個卷積神經網絡!

事實上, 我們將利用著名的 MNIST 數據集, 訓練一個準確度超過 99% 的手寫數字分類器.

開始之前, 請注意, 本指南是面向對應用深度學習感興趣的初學者的.

我們旨在向你介紹一個最流行的同時也是功能最強大的, 用於建立神經網絡的 Python 庫. 這意味著我們將跳過許多理論與數學知識, 但我們還是會向你推薦一些學習這些的極好的資源.


開始之前推薦的預備知識

本指南推薦的預備知識有:

為了能快速開始, 我們假設你已經具備了這方面的知識.

為什麼要用 Keras?

Keras 是我們推薦的 Python 深度學習庫, 尤其是對於初學者而言. 它很簡約, 模塊化的方法使建立並運行神經網絡變得輕巧. 你可以在這裡讀到更多關於 Keras 的內容:

深度學習究竟是什麼?

深度學習是指具有多隱層的神經網絡, 其可以學習輸入數據的抽象表示. 這個定義顯然太簡單了, 但對於現在的我們來說, 卻是最有實際意義的.

比方說, 深度學習促進了計算機視覺的巨大進步. 現在, 我們能夠對圖片進行分類, 識別圖片中的物體, 甚至給圖片打標籤. 要實現這些, 多隱層的深度神經網絡可以從原始輸入圖片中按序學習更複雜的特徵:

第一層隱層也許只能學習到局部邊緣模式.

之後, 每一個後續層 (或過濾器) 將學習更複雜的表示.

最後, 最後一層可以對圖片進行分類, 是貓還是袋鼠.

這類深度神經網絡就稱為卷積神經網絡.

卷積神經網絡究竟是什麼?

簡而言之, 卷積神經網絡 (CNN) 就是將輸入數據假設成圖的多層神經網絡 (有些時候, 會有多達 17 甚至更多層).


通過實現這個需求, CNN 可以大大減少需要調整的參數數量. 因此, CNN 可以高效處理高維原始圖片.

卷積神經網絡的底層機制已經超過了本教程的範圍, 更多請看這裡.

本教程不是什麼:

這不是一門深度學習的完整課程. 相反地, 本教程旨在帶你從零到一, 儘量”無痛”地建立卷積神經網絡!

如果你有興趣掌握深度學習背後的理論, 強烈推薦史丹福大學的這門課:

開始前的小提示:

我們試著讓教程儘可能流線化, 這意味著任何一個主題, 我們都不會太深究細節. 萬一你想要學習關於一個函數或模塊更多的知識, 同時打開 Keras 文檔 很有幫助.

Keras 教程目錄

下面是創建你的第一個卷積神經網絡 (CNN) 的步驟:

配置環境

安裝 Keras

導入庫和模塊

從 MNIST 導入圖片數據

預處理輸入數據

預處理類標籤

定義模型架構

編譯模型

用訓練數據擬合模型

用測試數據評估模型

第一步: 配置環境

首先, 掛一張勵志海報:


可能沒什麼用- -.

然後, 確保你的計算機上已經安裝了以下軟體:

Python 2.7+ (Python 3 也可以, 但總體而言, Python 2.7 在數據科學領域依舊更受歡迎.)

Scipy 和 NumPy

Matplotlib (可選的, 推薦用於探索性分析)

Theano* (安裝指南)

強烈建議使用 Anaconda 發行版 來安裝 Python, NumPy, SciPy. 它自帶所有這些包.

注意: 用 TensorFlow 也可以 (作為 Theano 的替代), 但我們將堅持使用 Theano, 以保持程序足夠簡單. 使用 TensorFlow 和 Theano 的主要區別在於, 數據輸入神經網絡之前, 需要簡單地重塑.

你可以檢查一下是否都正確安裝了:

打開命令行窗口 (Mac 上是 Terminal), 並輸入:


你將看到 Python 解釋器:


然後, 可以導入上述庫並列印版本信息:


第二步: 安裝 Keras

如果我們沒有涵蓋如何安裝 Keras, 這就不是一篇 Keras 的教程.

好消息是, 如果你使用的 Anaconda, 你已經安裝好了一個超讚的包管理系統: pip.

你可以在命令行輸入 $ pip 確認安裝. 這條命令將列印一個命令和選項的列表. 如果你還沒有安裝 pip, 參照這裡進行安裝.

安裝好 pip 之後, 安裝 Keras 就很簡單了:


同樣地, 你可以確認是否正確安裝:


哎呀, 看起來好像 Keras 版本太低了. 版本升級也很簡單:


完美, 現在就可以開始了, 新建一個 Python 文件, 命名為 keras_cnn_example.py.

第三步: 導入庫和模塊

首先, 導入 numpy 並設置偽隨機數生成器設置種子. 這允許我們從腳本中重現結果:
然後, 從 Keras 中導入 Sequential 模塊. 它是一個神經網絡層的線性棧, 完美適配本教程將建立的前饋 CNN 類型.


然後, 從 Keras 中導入 “核心” 層. 這些是幾乎所有神經網絡都會用到的層:


接下來, 我們從 Keras 中導入 CNN 層. 這些是卷積層, 將幫助我們有效地訓練圖片數據:


最後, 導入一下工具. 這將為我們之後的數據轉換提供幫助:


現在, 我們有了建立神經網絡架構所需的一切.

第四步: 從 MNIST 加載圖片數據

MNIST 是深度學習和計算機視覺入門很好的數據集. 它很大, 這對於神經網絡是一個巨大的挑戰, 但它在單臺計算機上又是可管理的. 我們將在另一個文章中對此進行更多的討論: 6 Fun Machine Learning Projects for Beginners.

很方便的是, Keras 庫已經包含了 MNIST. 可以像這樣加載它:


看一下數據集的形狀:


很好, 看來我們的訓練集中有 60000 個樣本, 每張圖片都是 28*28 像素大小的. 我們可以用 matplotlib 繪製第一個樣例進行確認:


輸出的圖片是這樣的:


總的來說, 做計算機視覺的, 在進行任何算法工作之前, 可視地繪製數據很有幫助. 這是一個快速明智的檢查, 可以防止可避免的錯誤 (比如對數據維度的誤解).

第五步: 輸入數據預處理

在後端使用 Theano 時, 你必須顯式地聲明一個維度, 用於表示輸入圖片的深度. 舉個例子, 一幅帶有 RGB 3 個通道的全彩圖片, 深度為 3.

MNIST 圖片的深度為 1, 因此必須顯式地進行聲明.

換言之, 我們要將數據集從 (n, width, height) 轉換成 (n, depth, width, height).

可以簡單地實現:


可以再次列印 X_train 的維度, 進行確認:


輸入數據最後的預處理步驟是, 將數據類型轉換成 float32, 並且進行標準化, 使值落在 [0, 1] 區間內.


現在, 模型訓練的輸入數據就已經準備好了.

第六步: 預處理類標籤

接下來, 讓我們看一下類標籤數據的形狀:


呃…可能有點問題. 我們應該有 10 個不同的類型, 每一個類代表一個數字, 但是看起來, 現在只有一個 1 維數組. 再來看下前 10 個訓練樣本的標籤:


問題依舊. y_train 和 y_test 數據並沒有被分成 10 個不同的類標籤, 而是被表示成一個類型值的單一數組.

對此, 我們可以進行簡單的修正:


再看一眼:


好多了!

第七步: 定義模型架構

現在, 我們就可以定義我們的模型架構了. 在實際研發工作中, 研究員會花大量的時間研究模型架構.

在這裡, 為了教程的繼續, 我們不會討論理論或數學. 這本身就是複雜的領域, 對於想要深入學習的同學, 建議看一下上文提到的 CS231n 課程.

另外, 剛開始時, 你可以使用現成的例子或者實現紫黯學術論文中已經證明的架構. 這裡有一個 Keras 實現樣例.

我們先聲明一個順序模型:


然後, 聲明一個輸入層:


輸的形狀參數應為形狀為 1 的樣例. 本例中, 就是 (1, 28, 28), 與每張數字圖片的 (depth, width, height) 相對應.

但是前 3 個參數又代表什麼呢? 它們分別對應於要使用的卷積過濾器的數量, 每個卷積內核的行數與列數.

注意: 默認情況下, 步長為 (1, 1), 可以用 ‘subsample’ 參數進行調整.

列印當前模型的輸出進行確認:


然後, 我們可以像搭積木一樣向模型中添加更多的層:


再次聲明, 我們不會太深究理論的東西, 但有必要強調一下我們剛剛添加的 Dropout 層. 這是一個規範化模型的方法, 目的是防止過度擬合. 你可以在這裡看到更多內容.

MaxPooling2D 是一種減少模型參數數量的方式, 其通過在前一層上滑動一個 2*2 的濾波器, 再從這個 2*2 的濾波器的 4 個值中取最大值.

到目前為止, 對於模型的參數, 我們已經添加了 2 個卷積層. 要完成模型的架構, 讓我們添加一個完全連接的層和輸出層:


對於 Dense 層, 第一個參數是輸出的大小. Keras 會自動處理層間連接.

注意到最後一層的輸出大小為 10, 對應於 10 個數字類型.

同時還要注意, 卷積層的權重在傳遞給完全連接的 Dense 層之前, 必須壓平 (維度為 1).

以下是完整的模型架構:


現在, 我們唯一需要做的就是定義損失函數和優化器, 然後就可以對模型進行訓練了.

第八步: 編譯模型

現在可以輕鬆一點了, 最難的部分已經過去了.

只需要編譯模型, 然後我們就可以訓練它了. 編譯模型時, 我們需要聲明損失函數和優化器 (SGD, Adam 等等).


Keras 有各種各樣的 損失函數和開箱即用的優化器.

第九步: 用訓練數據進行模型擬合

要擬合模型, 我們需要做的就是聲明訓練的批次大小以及訓練次數, 然後傳入訓練數據.


簡單嗎?

你也可以使用各種回調函數來設置提前結束的規則, 保存模型權重, 或記錄每次訓練的歷史.

第十步: 用測試數據評估模型

最後, 可以用測試數據對模型進行評估:


恭喜! 你已經完成了本 Keras 教程.

我們剛剛體驗了 Keras 的核心功能, 但也僅僅是體驗. 希望通過本教程, 你已經獲得了進一步探索 Keras 所有功能的基礎.

如果希望繼續學習, 我們推薦學習其他的 Keras 樣例模型 和史丹福大學的計算機視覺課程.

完整的代碼

以下就是本教程的所有代碼, 保存為一個腳本:



英文原文:https://elitedatascience.com/keras-tutorial-deep-learning-in-python
譯者:kissg

相關焦點

  • TensorFlow 1.9 新增 tf.keras 官方入門教程(Keras與TF的深度集成)
    【導讀】Keras是深度學習框架中最適合工程化的框架之一,具有簡單友好的接口。
  • MLK | Keras 入門深度學習逢看必會
    ,便於日後溫習,這次主要講下Keras的入門。Keras的簡易安裝——Window版Keras 的「Hello World」01 Keras的簡易安裝——Window版Keras作為深度學習工具conda install gitgit clone https://github.com/fchollet/keras.gitcd keras/examples/python mnist_mlp.py
  • 深度學習第17講:keras入門和快速上手指南
    作者:魯偉一個數據科學踐行者的學習日記。
  • Python 深度學習,你的 Keras 準備好了嗎?
    該書是由 Keras 作者寫的,所以全書基本圍繞著 Keras 講深度學習的各種實現,從 CNN,RNN 到 GAN 等,偏入門,但理論和實戰部分都講的還不錯,承載著很多作者對深度學習整體性的思考。總之,Keras 非常適合大家快速上手深度學習項目。好了,今天從基礎開始,教大家在 win10 系統中,使用 Anaconda + TensorFlow + Keras,快速搭建一個 Keras 的開發環境(CPU 版本),非常容易。1.
  • Python安裝TensorFlow 2、tf.keras和深度學習模型的定義
    p=15826 深度學習的預測建模是現代開發人員需要了解的一項技能。TensorFlow是Google開發和維護的首要的開源深度學習框架。儘管直接使用TensorFlow可能具有挑戰性,但現代的tf.keras API使得Keras在TensorFlow項目中的使用簡單易用。使用tf.keras,您可以設計,擬合,評估和使用深度學習模型,從而僅用幾行代碼即可做出預測。
  • Python小白深度學習教程:Keras 精講(上)
    Python小白數據可視化教程:Seaborn 精講Python小白數據可視化教程:PyEcharts 精講Python小白機器學習教程:Sklearn精講Python小白機器可視化學習教程:Scikit-Plot精講Keras 是一個高級的 (high-level) 深度學習框架,作者是 François Chollet。
  • Keras: 基於 Python 的深度學習庫 PDF版發布啦~
    與其他任何深度學習框架相比,Keras在行業和研究領域的應用率更高(除 TensorFlow 之外,且Keras API 是 TensorFlow 的官方前端,通過 tf.keras 模塊使用)Keras 的核心原則是使事情變得相當簡單,同時又允許用戶在需要的時候能夠進行完全的控制(終極的控制是原始碼的易擴展性)。
  • Keras深度學習框架配置
    項目代碼是在Windows 7上運行的,主要用到的Matlab R2013a和Python,其中Matlab用於patch的分割和預處理,卷積神經網絡搭建用到了根植於Python和Theano的深度學習框架Keras。
  • 《概率深度學習:使用Python,Keras和TensorFlow概率》附下載
    Probabilistic Deep Learning: With Python, Keras and TensorFlow Probability作者: Oliver Duerr出版日期: 2020ISBN: 9781617296079頁數: 252語言: English格式: PDF大小: 60 Mb概率性深度學習
  • 從零開始深度學習第17講:keras入門及快速上手指南
    深度學習到這個進度,筆者覺得有必要開始對一些優秀的深度學習框架進行介紹了。Tensorflow 雖然很強大,但語法和使用便利性上對於新手來說並不是那麼的友好,所以到這裡筆者需要給大家介紹 keras 了。      keras 是一款使用純 python 編寫的神經網絡 API,使用 keras 能夠快速實現你的深度學習方案,所以 keras 有著為快速試驗而生的美稱。ker
  • Keras入門系列教程:兩分鐘構建你的第一個神經網絡模型
    本教程由深度學習中文社區(Studydl.com)持續發布與更新, 本系列其餘教程地址見文章末尾.引言Keras是一個用於構建和訓練深度學習模型的高級API, 後端計算主要使用TensorFlow或者Theano, 由於Theano已停止開發新功能轉入維護階段, 而且目前最新版的TensorFlow已經包含了Keras模塊, 所以本教程採用基於TensorFlow的Keras進行講解, TensorFlow版本1.4.1
  • 學python?不是一個python入門教程就行,學之前你必須知道這些
    三秋道果_python自學教程指南第二 學習目標:是自我提升還是轉行就業,目的不一樣選擇的是有「巨大」區別的既然是就業那麼就要看市場,就是人才需求市場,這裡說的市場當讓是說python人才需求的市場了。說到市場當然python每個方向肯定有市場了,咱們直接看主要矛盾:一個是需求量,另一個是入行的難易程度。python全棧目前是市場的需求量最大,入行也是最容易的。要是為了就業那就先這樣入門入行,就不用想了。
  • 深度學習軟體安裝指南
    儘管已經有很多非常棒的關於英偉達驅動和 CUDA 的安裝指南, 但依然沒有詳盡的深度學習環境搭建指南。另外,我需要查閱很多文檔來熟悉細節,其中一些細節還有待完善,甚至還有一些包含語法錯誤。因此我決定把我這段時間查閱的文檔(見參考連結)做個總結。該指南會安裝如下內容下面顯示了每個包的依賴項。Python 深度學習庫只需安裝一個,你可以選擇一個喜歡的進行安裝。
  • Keras TensorFlow教程:如何從零開發一個複雜深度學習模型
    本文假設你已經熟悉了 TensorFlow 和卷積神經網絡,如果,你還沒有熟悉,那麼可以先看看這個[10分鐘入門 TensorFlow 教程](http://cv-tricks.com/artificial-intelligence/deep-learning/deep-learning-frameworks/tensorflow-tutorial/)和[卷積神經網絡教程](http://cv-tricks.com
  • Python入門教程小孩兒都能學會的零基礎Python學習教程
    作為一個Python近2年的學習者,為大家獻上一些不錯的Python自學乾貨。 Python入門教程 Python入門教程 這是我在自學路上,整理的不錯的Python自學資料。本學習路線共分為9個部分(如圖-1):Python語言基礎的學習,掌握python的核心語法;玩轉Linux作業系統,掌握如何使?雲伺服器和Linux作業系統;資料庫入門到實戰,掌握傳統的關係型資料庫以及新興的?關係型資料庫產品的使??法;輕鬆搞定web前端,掌握前端開發最核?
  • 經驗貼 | 深度學習(計算機視覺方向)小白入門的一些建議
    在我大概知道了這些以後,我發現我需要學習一門語言——python然後我就加了各種QQ群,問大家該如何學習,之後我選了一本python教材,名字我忘了就是什麼零基礎入門什麼的,後來我發現直接去菜鳥教程網站看就可以了,把基礎的看一下,如果你是計算機專業的或者之前編過程序,那應該很快就看完了,建議直接學python3,網站地址:Python 基礎教程 | 菜鳥教程
  • 帶你少走彎路:強烈推薦的Keras快速入門資料和翻譯(可下載)
    ,受到很多好評,讀者強烈建議我再出一個keras的快速入門路線,經過翻譯和搜索網上資源,我推薦4份入門資料,希望對大家有所幫助。《python深度學習》及中文注釋的代碼TensorFlow團隊的Josh Gordon推薦這本書,TF2.0基於Keras。如果你是一個深度學習新手,最好從這本書入手。
  • TensorFlow教程:快速入門深度學習五步法(附Keras實例)
    作為一個程式設計師,我們可以像學習編程一樣學習深度學習模型開發。3種異構網絡互聯層: 嵌入層:用於第一層,輸入數據到其他網絡的轉換 Flatten層:用於卷積層到全連接層之間的過渡 Permute層:用於RNN與CNN之間的接口五步法五步法是用深度學習來解決問題的五個步驟
  • 10個深度學習軟體的安裝指南(附代碼)
    由於近期論文的需要,我搭建了一個基於 Ubuntu 和英偉達的深度學習環境。儘管已經有很多非常棒的關於英偉達驅動和 CUDA 的安裝指南, 但依然沒有詳盡的深度學習環境搭建指南。另外,我需要查閱很多文檔來熟悉細節,其中一些細節還有待完善,甚至還有一些包含語法錯誤。因此我決定把我這段時間查閱的文檔(見參考連結)做個總結。
  • 代碼詳解:構建一個簡單的Keras+深度學習REST API
    全文共3176字,預計學習時長6分鐘在本教程中,