使用 TensorFlow 一個最大的好處是能夠用各類運算符(Ops)靈活構建計算圖,同時能夠支持自定義運算符(見本公衆號早期文章《TensorFlow 增長自定義運算符》)。因爲運算符的粒度較小,在構建深度學習模型時,代碼寫出來比較冗長,好比實現卷積層:5, 9react
這種方式在設計較大模型時會比較麻煩,須要程序員徒手完成各個運算符之間的鏈接,像一些中間變量的維度變換、運算符參數選項、多個子網絡鏈接處極易發生問題,肉眼檢查也很難發現代碼中潛伏的 bug,會致使運行時出錯(運氣好),或者運行時不出錯但運行結果不可解釋(運氣很差),消耗大量時間和精力。git
有沒有更好的實現各類經典模型的方式?程序員
答案是確定的!github
咱們今天學習一下在 TensorFlow 之上構建的高層次 API—— TFLearn【2】。瀏覽器
TFLearn 是一個模塊化和透明的深度學習庫,構建在 TensorFlow 之上。網絡
它爲 TensorFlow 提供高層次 API,目的是便於快速搭建試驗環境,同時保持對 TensorFlow 的徹底透明和兼容性。架構
TFLearn 的一些特色:ide
容易使用和易於理解的高層次 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.