
利用 TFLearn 快速搭建經典深度學習模型
使用 TensorFlow 一個最大的好處是可以用各種運算符(Ops)靈活構建計算圖,同時可以支持自定義運算符(見本公眾號早期文章《TensorFlow 增加自定義運算符》)。由於運算符的粒度較小,在構建深度學習模型時,代碼寫出來比較冗長,比如實現卷積層:5, 9

這種方式在設計較大模型時會比較麻煩,需要程序員徒手完成各個運算符之間的連接,像一些中間變量的維度變換、運算符參數選項、多個子網絡連接處極易發生問題,肉眼檢查也很難發現代碼中潛伏的 bug,會導致運行時出錯(運氣好),或者運行時不出錯但運行結果不可解釋(運氣不好),消耗大量時間和精力。
有沒有更好的實現各種經典模型的方式?
答案是肯定的!
我們今天學習一下在 TensorFlow 之上構建的高層次 API—— TFLearn【2】。
TFLearn 是一個模塊化和透明的深度學習庫,構建在 TensorFlow 之上。
它為 TensorFlow 提供高層次 API,目的是便於快速搭建試驗環境,同時保持對 TensorFlow 的完全透明和兼容性。
TFLearn 的一些特點:
-
容易使用和易於理解的高層次 API 用於實現深度神經網絡,附帶教程和例子;
-
通過高度模塊化的內置神經網絡層、正則化器、優化器等進行快速原型設計;
-
對 TensorFlow 完全透明,所有函數都是基於 tensor,可以獨立於 TFLearn 使用;
-
強大的輔助函數,訓練任意 TensorFlow 圖,支持多輸入、多輸出和優化器;
-
簡單而美觀的圖可視化,關於權值、梯度、特征圖等細節;
-
無需人工干預,可使用多 CPU、多 GPU;
-
高層次 API 目前支持最近大多數深度學習模型,像卷積網絡、LSTM、BiRNN、BatchNorm、PReLU、殘差網絡、生成網絡、增強學習…… 將來會一直更新最近的深度學習技術;
心動不如行動,我們馬上就體驗!在一台已經安裝了 TensorFlow 的機器上(安裝步驟參考之前文章《TensorFlow 1.0.0rc1 入坑記》《利用 TensorFlow 集裝箱快速搭建交互式開發環境》《如何在 Windows 系統玩 TensorFlow》)直接運行以下命令:pip in

檢查安裝成功:

為了方便運行 TFLearn 附帶例程,我們需要克隆 TFLearn 源碼:h

先看看如何用 TFLearn 實現 AlexNet 用於 Oxford 17 類鮮花數據集分類任務的:



上圖為論文【1】 中的 AlexNet 結構。
TFLearn 例程中實現的 AlexNet 和論文【1】中相比做了一些修改:
-
輸入圖像尺寸變為 227 x 227;
-
將 2-tower 架構改為 single-tower;
-
最后一個分類層的輸出類別數從 1000 變為 17;
運行該例程:

該程序會自動下載 Oxford 17 flowers 數據集, 選了幾個不同類別圖片如下:
運行 AlexNet 模型訓練截圖如下:

在另一個命令行窗口啟動 TensorBoard:

打開瀏覽器,輸入地址:localhost:6006,打開 TensorBoard 頁面,查看訓練過程的准確率、loss 值變化:
AlexNet 模型可視化(之一)
(之二)
模型權值分布:
模型權值的直方圖,可以看出權值訓練歷史:

通過今天內容,讀者可以看出使用 TFLearn 高層次 API 相比直接使用 TensorFlow 實現深度學習模型具有使用更簡單、構建更快速、可視化更方便等特點,從此無需手動處理各個運算符之間的連接,解放了生產力,提高了模型設計和優化效率。
作為練習,讀者可以進一步學習 TFLearn 實現其他經典深度學習模型如 VGG、Inception、NIN、ResNet 等,對比原始論文學習,相信會有更大的收獲。
參考文獻
【1】Alex Krizhevsky, Ilya Sutskever & Geoffrey E. Hinton. ImageNet Classification with Deep Convolutional Neural Networks. NIPS, 2012.