簡單粗暴上手TensorFlow 2.0,北大學霸力作,必須人手一冊!(附資源)

 2019-10-15 12:00:45.0

[ 導讀 ]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 模型訓練 *

大規模訓練與加速

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 數字分類
  • TensorFlow in Julia(Ziyang)
    • TensorFlow.jl 簡介
      • 爲什麼要使用 Julia
    • TensorFlow.jl 環境配置
      • 在 docker 中快速體驗 TensorFlow.jl
      • 在 julia 包管理器中安裝 TensorFlow.jl
    • TensorFlow.jl 基礎使用
      • MNIST 數字分類

附錄

  • 圖模型下的 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),目前的研究重點是基於圖的現實場景中多主體強化學習的應用。

文章來源:機器之心