[ 導讀 ]TensorFlow 2.0 於近期正式發佈後,立即受到學術界與科研界的廣泛關注與好評。此前,我們曾特邀專家回顧了 TensorFlow 2.0 從初版到最新版本的發展史。今天,我們將介紹一本全面詳解 TensorFlow 2.0 的手冊。這本手冊是 Google Summer of Code 2019 項目之一,從基礎安裝與環境配置、部署,到大規模訓練與加速、擴展,全方位講解 TensorFlow 2.0 的入門要點,並附錄相關資料供讀者參考。
這是一本簡明的 TensorFlow 2.0 入門指導手冊,基於 Keras 和 Eager Execution(即時運行)模式,力圖讓具備一定機器學習及 Python 基礎的開發者們快速上手 TensorFlow 2.0。
本手冊的所有代碼基於 TensorFlow 2.0 正式版及 Beta1 版本。
中文指南:
https://tf.wiki/
GitHub鏈接:
https://github.com/snowkylin/tensorflow-handbook
文中的所有示例代碼:
https://github.com/snowkylin/tensorflow-handbook/tree/master/source/_static/code/zh
本手冊所有章節如下圖,不僅包含 TensorFlow 的概述,還含有基礎、部署、大規模訓練與加速、擴展,以及附錄部分。
前言
此前,TensorFlow 所基於的傳統 Graph Execution 的弊端,如入門門檻高、調試困難、靈活性差、無法使用 Python 原生控制語句等早已被開發者詬病許久。一些新的基於動態圖機制的深度學習框架(如 PyTorch)也橫空出世,並以其易用性和快速開發的特性而佔據了一席之地。尤其是在學術研究等需要快速迭代模型的領域,PyTorch 等新興深度學習框架已經成爲主流。作者所在的數十人的機器學習實驗室中,竟只有其一人 「守舊」 地使用 TensorFlow。
然而,直到目前,市面上相關的 TensorFlow 相關的中文技術書籍及資料仍然基於傳統的 Graph Execution 模式,讓不少初學者(尤其是剛學過機器學習課程的大學生)望而卻步。由此,在 TensorFlow 正式支持 Eager Execution 之際,有必要出現一本全新的技術手冊,幫助初學者及需要快速迭代模型的研究者,以一個全新的角度快速入門 TensorFlow。
同時,本手冊還有第二個任務。市面上與 TensorFlow 相關的中文技術書籍大都以深度學習爲主線,將 TensorFlow 作爲這些深度學習模型的實現方式。這樣固然有體系完整的優點,然而對於已經對機器學習或深度學習理論有所瞭解,希望側重於學習 TensorFlow 本身的讀者而言,就顯得不夠友好。
於是,作者希望編寫一本手冊,以儘量精簡的篇幅展示 TensorFlow 作爲一個計算框架的主要特性,並彌補官方手冊的不足,力圖能讓已經有一定機器學習 / 深度學習知識及編程能力的讀者迅速上手 TensorFlow,並在實際編程過程中可以隨時查閱並解決實際問題。
適用羣體
本書適用於以下讀者:
- 已有一定機器學習 / 深度學習基礎,希望將所學理論知識使用 TensorFlow 進行具體實現的學生和研究者;
- 曾使用或正在使用 TensorFlow 1.X 版本或其他深度學習框架(比如 PyTorch),希望瞭解 TensorFlow 2.0 新特性的開發者;
- 希望將已有的 TensorFlow 模型應用於業界的開發者或工程師。
提示
本書不是一本機器學習 / 深度學習原理入門手冊。若希望進行機器學習 / 深度學習理論的入門學習,可參考附錄中提供的一些入門資料。
TensorFlow 概述
- 學生和研究者:模型的建立與訓練
- 開發者和工程師:模型的調用與部署
- TensorFlow 能幫助我們做什麼?
基礎
1. TensorFlow 安裝與環境配置
TensorFlow 的最新安裝步驟可參考官方網站上的說明(https://tensorflow.google.cn/install)。TensorFlow 支持 Python、Java、Go、C 等多種編程語言以及 Windows、OSX、Linux 等多種操作系統,此處及後文均以 Python 3.7 爲準。
提示
本章介紹在一般的個人電腦或服務器上直接安裝 TensorFlow 2.0 的方法。關於在容器環境(Docker)、雲平臺中部署 TensorFlow 或在線上環境中使用 TensorFlow 的方法,見附錄 使用 Docker 部署 TensorFlow 環境和在雲端使用 TensorFlow 。軟件的安裝方法往往具有時效性,本節的更新日期爲 2019 年 10 月。
- 一般安裝步驟
- GPU 版本 TensorFlow 安裝指南
- GPU 硬件的準備
- NVIDIA 驅動程序的安裝
- CUDA Toolkit 和 cnDNN 的安裝
- 第一個程序
- IDE 設置
- TensorFlow 所需的硬件配置 *
2. TensorFlow 基礎
本章介紹 TensorFlow 的基本操作。
- TensorFlow 1+1
- 自動求導機制
- 基礎示例:線性迴歸
- NumPy 下的線性迴歸
- TensorFlow 下的線性迴歸
3. TensorFlow 模型建立與訓練
本章介紹如何使用 TensorFlow 快速搭建動態模型。
- 模型(Model)與層(Layer)
- 基礎示例:多層感知機(MLP)
- 數據獲取及預處理:tf.keras.datasets
- 模型的構建:tf.keras.Model 和 tf.keras.layers
- 模型的訓練:tf.keras.losses 和 tf.keras.optimizer
- 模型的評估:tf.keras.metrics
- 卷積神經網絡(CNN)
- 使用 Keras 實現卷積神經網絡
- 使用 Keras 中預定義的經典卷積神經網絡結構
- 循環神經網絡(RNN)
- 深度強化學習(DRL)
- Keras Pipeline *
- Keras Sequential/Functional API 模式建立模型
- 使用 Keras Model 的 compile 、 fit 和 evaluate 方法訓練和評估模型
- 自定義層、損失函數和評估指標 *
- 自定義層
- 自定義損失函數和評估指標
4. TensorFlow 常用模塊
- tf.train.Checkpoint :變量的保存與恢復
- TensorBoard:訓練過程可視化
- tf.data :數據集的構建與預處理
- 數據集對象的建立
- 數據集對象的預處理
- 數據集元素的獲取與使用
- 實例:cats_vs_dogs 圖像分類
- @tf.function :Graph Execution 模式 *
- @tf.function 基礎使用方法
- @tf.function 內在機制
- AutoGraph:將 Python 控制流轉換爲 TensorFlow 計算圖
- 使用傳統的 tf.Session
- tf.TensorArray :TensorFlow 動態數組 *
- tf.config:GPU 的使用與分配 *
- 指定當前程序使用的 GPU
- 設置顯存使用策略
- 單 GPU 模擬多 GPU 環境
部署
- TensorFlow 模型導出
- 使用 SavedModel 完整導出模型
- Keras Sequential save 方法(Jinpeng)
- TensorFlow Serving
- TensorFlow Serving 安裝
- TensorFlow Serving 模型部署
- Keras Sequential 模式模型的部署
- 自定義 Keras 模型的部署
- 在客戶端調用以 TensorFlow Serving 部署的模型
- Python 客戶端示例
- Node.js 客戶端示例(Ziyang)
- TensorFlow Lite(Jinpeng)
- 模型轉換
- Android 部署
- Quantization 模型轉換
- 總結
- TensorFlow in JavaScript(Huan)
- TensorFlow.js 簡介
- 瀏覽器中使用 TensorFlow.js 的優勢
- TensorFlow.js 性能對比
- TensorFlow.js 環境配置
- 在瀏覽器中使用 TensorFlow.js
- 在 Node.js 中使用 TensorFlow.js
- 在微信小程序中使用 TensorFlow.js
- TensorFlow.js 模型部署
- 通過 TensorFlow.js 加載 Python 模型
- 使用 TensorFlow.js 模型庫
- TensorFlow.js 模型訓練 *
- TensorFlow.js 簡介
大規模訓練與加速
1. TensorFlow 分佈式訓練
當我們擁有大量計算資源時,通過使用合適的分佈式策略,可以充分利用這些計算資源,從而大幅壓縮模型訓練的時間。針對不同的使用場景,TensorFlow 在 tf.distribute.Strategy 中爲我們提供了若干種分佈式策略,從而能夠更高效地訓練模型。
- 單機多卡訓練:MirroredStrategy
- 多機訓練:MultiWorkerMirroredStrateg
2. 使用 TPU 訓練 TensorFlow 模型(Huan)
2017 年 5 月,Alpha Go 在中國烏鎮圍棋峯會上,與世界第一棋士柯潔比試,並取得了三比零全勝戰績。之後的版本 Alpha Zero 可以通過自我學習 21 天即可以達到勝過中國頂尖棋手柯潔的 Alpha Go Master 的水平。
Alpha Go 背後的動力全部由 TPU 提供,TPU 使其能夠更快地 「思考」 並在每一步之間看得更遠。
- TPU 簡介
- 什麼是 TPU
- 爲什麼使用 TPU
- TPU 性能
- TPU 環境配置
- 免費 TPU:Google Colab
- Cloud TPU
- TPU 基礎使用
擴展
- TensorFlow Hub 模型複用(Jinpeng)
- TensorFlow Datasets 數據集載入
- Swift for TensorFlow (S4TF) (Huan)
- S4TF 簡介
- 爲什麼要使用 Swift 進行 Tensorflow 開發
- S4TF 環境配置
- 本地安裝 Swift for Tensorflow
- 在 Colaboratory 中快速體驗 Swift for Tensorflow
- 在 Docker 中快速體驗 Swift for TensorFlow
- S4TF 基礎使用
- 在 Swift 中使用標準的 TensorFlow API
- 在 Swift 中直接加載 Python 語言庫
- 語言原生支持自動微分
- MNIST 數字分類
- S4TF 簡介
- TensorFlow in Julia(Ziyang)
- TensorFlow.jl 簡介
- 爲什麼要使用 Julia ?
- TensorFlow.jl 環境配置
- 在 docker 中快速體驗 TensorFlow.jl
- 在 julia 包管理器中安裝 TensorFlow.jl
- TensorFlow.jl 基礎使用
- MNIST 數字分類
- TensorFlow.jl 簡介
附錄
- 圖模型下的 TensorFlow
- TensorFlow 1+1
- 基礎示例:線性迴歸
- 使用 Docker 部署 TensorFlow 環境
- 在雲端使用 TensorFlow
- 在 Colab 中使用 TensorFlow
- 在 Google Cloud Platform(GCP)中使用 TensorFlow
- 在 Compute Engine 建立帶 GPU 的實例並部署 TensorFlow
- 使用 AI Platform 中的 Notebook 建立帶 GPU 的在線 JupyterLab 環境
- 在阿里雲上使用 GPU 實例運行 Tensorflow(Ziyang)
- 部署自己的交互式 Python 開發環境 JupyterLab
- TensorFlow 性能優化
- 參考資料與推薦閱讀
- 術語中英對照表
答疑區
- (中文)TensorFlow 中文社區 「簡單粗暴 TensorFlow」 版面:https://www.tensorflowers.cn/b/48 (中文的疑問和建議請來此處,將以中文回答和討論。歡迎使用中文的開發者們前來 TensorFlow 中文社區交流討論)
- (英文)https://github.com/snowkylin/tensorflow-handbook/releases (英文的疑問或建議可在 GitHub issue 中提出,會以英文回答)
PDF 下載(舊版):
- 中文版:
https://www.tensorflowers.cn/t/6230 (同時也有英文版下載) - 英文版:
https://github.com/snowkylin/tensorflow-handbook/releases
搜索頁面:
https://tf.wiki/search.html
作者乃北大學霸
最後,我們有必要介紹一下《簡單粗暴TensorFlow 2.0》的作者李錫涵。
據領英資料顯示,李錫涵是來自北大信息科學技術學院的準理科碩士生,擔任見習顧問和研究助理,2016年本科畢業於浙大竺可楨學院,並在 2015 年以交換生的身份進入交通大學。
李錫涵曾在微軟亞研院機器學習組實習,在谷歌還是機器學習方面的GDE(Google Developers Expert),目前的研究重點是基於圖的現實場景中多主體強化學習的應用。