使用Keras的流程如圖7-8所示。
圖7-8 Keras使用的過程
(1)選擇模型
Keras提供序貫式模型和函數式模型兩種模型,在以下的例子中將使用序貫式模型。
(2)構建網絡層
在以下的例子中使用了卷積網絡層和丟棄層(Dropout)。
(3)編譯
編譯相當於進行搭建,可以使用model.compile( )函數體驗其作用。
(4)訓練
這是耗費時間的步驟,通過訓練計算出所有的網絡參數,對應的函數是model.fit( )。
(5)預測
這是使用模型解決問題的步驟。例如,一個用來識別花朵類型的網絡,輸入花朵圖片之後,預測出該花朵的類別。
幾乎所有智能手機都支持手寫識別,即通過手指或手寫筆在屏幕上進行書寫,然後識別出所寫的字符(圖7-9)。下麵以手寫數字識別為例講解上述流程並具體實現這個識別任務。
傳統計算機視覺方法中,識別手寫字體是通過定義特征完成的。例如,某個手寫數字帶有兩個封閉區域,就很可能是8。這樣的方法經過不斷地特征總結,準確率可以超過90%,這已經達到了可以實際應用的水平。但是當需要識別的類別變得更多的時候,例如,從10個數字增加到3 900個漢字,如果依然通過總結特征進行識別,那麽識別率的提升就需要巨大的工作量,也很難提高到可用的程度。
然而通過深度學習,手寫識別變成了一項簡單的工作。這裏的簡單是指構建過程簡單,但完成這個識別任務的整個工作並不容易,因為深度學習需要做大量的標注訓練數據的工作。對手寫數字來說,所謂的標注數據,就是通過人工標注各個手寫圖片到底是什麽數字,從而建立圖片和數字之間的映射關係(表7-1)。
圖7-9 手寫數字圖片
表7-1 圖片標注
在這個案例中,使用的數據集是深度學習經常使用的數據集MINST。這是一個手寫數字數據庫,包含60 000個訓練樣本和10 000個測試樣本,每個樣本圖像的寬高為28×28。需要注意的是,此數據集中的圖片是以二進製存儲的,不能直接以圖像格式查看,不過很容易找到將其轉換成圖像格式的工具。