- 理解TensorFlow模型模式和ML工作流中的最佳實踐。
- 使用代碼段作為構建TensorFlow模型和工作流的模板。
- 通過集成TensorFlow Hub中的預建模型節(jié)省開發(fā)時間。
- 使用加速器集群(如GPU或TPU)充分利用分布式訓練。
- 對數(shù)據(jù)攝取、訓練模型、模型保存和推理做出明智的設計選擇。
這是一本使用Python實現(xiàn)TensorFlow設計模式的簡明參考書,可以幫助你對各種不同用例做出明智的決策。本書作者并不是只強調(diào)TensorFlow本身,而是全面地介紹了數(shù)據(jù)科學和機器學習領域中的常見主題和任務。
什么時候使用NumPy或流式數(shù)據(jù)集提供訓練數(shù)據(jù)?為什么?訓練過程中你要如何建立數(shù)據(jù)轉(zhuǎn)換和工作流?如何使用遷移學習充分利用一個預訓練的模型?如何完成超參數(shù)調(diào)優(yōu)?選擇這本書,它會大大減少你為TensorFlow用例搜尋選擇方案花費的時間。
前言
TensorFlow 生態(tài)系統(tǒng)已經(jīng)演化為很多不同的框架,為各種不同的角色和功能提供服務。這種靈活性一定程度上解釋了為什么TensorFlow 得到了廣泛采用,不過這也使數(shù)據(jù)科學家、機器學習(Machine Learning,ML)工程師和其他技術相關者的學習曲線變得復雜化。對于常見的任務,如數(shù)據(jù)和特征工程、數(shù)據(jù)攝取、模型選擇、訓練模式、針對過擬合的交叉驗證以及部署策略,管理TensorFlow模型的方法有很多,這就帶來了大量繁復的選擇。
本書將幫助你選擇如何使用TensorFlow 開展工作,包括如何在Python 中使用TensorFlow 2.0 設計模式建立常用的數(shù)據(jù)科學和ML 工作流。書中的示例將描述并演示TensorFlow 編碼模式以及你在ML 項目工作中可能經(jīng)常遇到的其他任務。
可以把它作為一個指南,也可以作為一本參考書。
這本書面向當前以及未來的ML工程師、數(shù)據(jù)科學家和企業(yè)ML解決方案架構師,他們希望增進自己在TensorFlow 建模的可重用模式和最佳實踐方面的知識和經(jīng)驗。你可能已經(jīng)讀過一本入門的TensorFlow 書,而且時刻跟蹤數(shù)據(jù)科學領域的發(fā)展,對此已經(jīng)有基本的了解。本書假設你有使用Python(可能還有NumPy、pandas 和JSON 庫)完成數(shù)據(jù)工程和特征工程以及構建TensorFlow 模型的實踐經(jīng)驗。如果你熟悉常用的一些數(shù)據(jù)結構(如列表、字典和NumPy 數(shù)組),這些經(jīng)驗也會很有幫助。
與很多其他TensorFlow 書不同,這本書重點關注你要完成的任務,并圍繞這個中心組織全書內(nèi)容,包括:
何時以及為什么采用NumPy 數(shù)組或流式數(shù)據(jù)集提供訓練數(shù)據(jù)(第2 章和第5 章)?
如何使用遷移學習充分利用預訓練的模型(第3 章和第4 章)?
使用一個通用的fit 函數(shù)完成訓練還是編寫一個自定義訓練循環(huán)(第6 章)?
如何管理和使用模型檢查點(第7 章)?
如何使用TensorBoard 檢查訓練過程(第7 章)?
如果無法將所有數(shù)據(jù)放入運行時環(huán)境的內(nèi)存,如何使用多個加速器(如GPU)完成分布式訓練(第8 章)?
推理過程中如何將數(shù)據(jù)傳遞到模型,另外如何處理輸出(第9 章)?
你的模型公平嗎(第10 章)?
如果你正糾結于這些問題,這本書會對你很有幫助。
排版約定
本書采用以下排版約定。
斜體
表示新術語、URL、電子郵件地址、文件名和文件擴展名。
等寬字體(Constant Width)
表示程序清單,在段落內(nèi)表示程序元素,例如變量、函數(shù)名稱、數(shù)據(jù)庫、數(shù)據(jù)類型、環(huán)境變量、語句和關鍵字。
粗體等寬字體(Constant width bold)
表示應由用戶原封不動輸入的命令或其他文本。
斜體等寬字體(Constant width italic)
表示應該替換成用戶提供值的文本,或者由上下文決定的值。
提示
表示提示或建議。
使用代碼示例
這本書的補充材料( 代碼示例, 練習等) 可以從https://github.com/shinchan75034/tensorflowpocket-ref 下載。
如果你有技術問題,或者使用代碼示例時遇到問題,請發(fā)送電子郵件至errata@oreilly.com.cn。
本書的目的是要幫助你完成工作。一般來講,如果書中提供了示例代碼,你可以在你的程序和文檔中使用這些示例代碼,除非你直接復制了大部分的代碼,否則不需要聯(lián)系我們來得到許可。例如,如果你在編寫一個程序,使用了本書中的多段代碼,這并不需要得到許可。但是出售或發(fā)行OReilly 書的示例代碼則需要得到許可;卮饐栴}時如果引用了這本書的文字和示例代碼,這不需要得到許可。但是如果你的產(chǎn)品文檔借用了本書中的大量示例代碼,則需要得到許可。
我們希望但不嚴格要求標明引用出處。引用信息通常包括書名、作者、出版商和ISBN。例如,TensorFlow 2 Pocket Reference by KC Jung(OReilly).Copyright 2021 Favola Vera, LLC, 978-1-492-08918-6。
如果你認為使用代碼示例時超出了合理使用范圍或者上述許可范圍,可以隨時聯(lián)系我們:permissions@oreilly.com。
OReilly 在線學習平臺(OReilly Online Learning)
近40 年來,OReilly Media 致力于提供技術和商業(yè)培訓、知識和卓越見解,來幫助眾多公司取得成功。
公司獨有的專家和改革創(chuàng)新者網(wǎng)絡通過OReilly 書籍、文章以及在線學習平臺,分享他們的專業(yè)知識和實踐經(jīng)驗。OReilly 在線學習平臺按照您的需要提供實時培訓課程、深入學習渠道、交互式編程環(huán)境以及來自OReilly 和其他200 多家出版商的大量書籍與視頻資料。更多信息,請訪問網(wǎng)站:https://www.oreilly.com/。
聯(lián)系我們
任何有關本書的意見或疑問,請按照以下地址聯(lián)系出版社。
美國:
OReilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國:
北京市西城區(qū)西直門南大街2 號成銘大廈C 座807 室(100035)
奧萊利技術咨詢(北京)有限公司
針對這本書,我們還建有一個網(wǎng)頁,列出了有關勘誤、示例和其他信息?梢酝ㄟ^以下地址訪問這個頁面:https://oreil.ly/tensorflow2pr。
如果對這本書有什么意見,或者詢問技術上的問題,請發(fā)送電子郵件至errata@oreilly.com.cn。
要了解關于我們的圖書和課程的新聞和信息,請訪問我們的網(wǎng)站:http://www.oreilly.com。
我們的Facebook:http://facebook.com/oreilly。
我們的Twitter:http://twitter.com/oreillymedia。
我們的YouTube:http://www.youtube.com/oreillymedia。
致謝
非常感謝OReilly 編輯們周密而專業(yè)的工作。此外,我還要感謝技術審校Tony Holdroyd、Pablo Marin、Giorgio Saez 和Axel Sirota 提供的寶貴反饋和建議。最后,還要特別感謝Rebecca Novack 和Sarah Grey 給我這個機會,與我合作編寫了這本書。
KC Tung 是微軟的云解決方案架構師,擅長在企業(yè)云架構中設計和交付機器學習和AI 解決方案。他幫助企業(yè)客戶使用用例驅(qū)動的架構,在云中完成 AI/ML 模型開發(fā)和部署,以及選擇最適合其需求的技術和集成方案。他是微軟認證的人工智能工程師和數(shù)據(jù)工程師,擁有得克薩斯大學西南醫(yī)學院的分子生物物理學博士學位。
目錄
前言 . 1
第1 章 TensorFlow 2 簡介 . 7
1.1 TensorFlow 2 的改進 8
1.1.1 Keras API .8
1.1.2 TensorFlow 中的可重用模型 9
1.2 簡化常用操作 10
1.2.1 開源數(shù)據(jù) 10
1.2.2 使用分布式數(shù)據(jù)集 10
1.2.3 數(shù)據(jù)流式處理 11
1.2.4 數(shù)據(jù)工程 11
1.2.5 遷移學習 12
1.2.6 模型風格 12
1.2.7 監(jiān)視訓練過程 12
1.2.8 分布式訓練 13
1.2.9 提供TensorFlow 模型服務 13
1.2.10 改善訓練體驗 13
1.3 總結 14
第2 章 數(shù)據(jù)存儲和攝取 15
2.1 使用Python 生成器流式處理數(shù)據(jù) 16
2.2 使用生成器流式處理文件內(nèi)容 .18
2.3 JSON 數(shù)據(jù)結構 .21
2.4 建立文件名模式 22
2.5 將一個CSV 文件劃分為多個CSV 文件23
2.6 使用tf.io 創(chuàng)建文件模式對象 .24
2.7 創(chuàng)建流式數(shù)據(jù)集對象 .25
2.8 流式處理CSV 數(shù)據(jù)集 28
2.9 組織圖像數(shù)據(jù) 29
2.10 使用TensorFlow 圖像生成器31
2.11 流式處理交叉驗證圖像33
2.12 查看調(diào)整大小后的圖像 .34
2.13 總結 .36
第3 章 數(shù)據(jù)預處理 . 39
3.1 準備表格數(shù)據(jù)進行訓練 39
3.1.1 標記列 .41
3.1.2 將列交互編碼為可能的特征 46
3.1.3 創(chuàng)建交叉驗證數(shù)據(jù)集48
3.1.4 開始模型訓練過程 49
3.1.5 小結 50
3.2 準備圖像數(shù)據(jù)進行處理 51
3.2.1 將圖像轉(zhuǎn)換為固定大小 55
3.2.2 訓練模型 58
3.2.3 小結 60
3.3 準備文本數(shù)據(jù)進行處理 60
3.3.1 文本分詞 61
3.3.2 創(chuàng)建字典和反轉(zhuǎn)字典65
3.4 總結 67
第4 章 可重用模型元素 69
4.1 基本TensorFlow Hub 工作流 70
4.2 利用遷移學習完成圖像分類 74
4.2.1 模型需求 74
4.2.2 數(shù)據(jù)轉(zhuǎn)換和輸入處理75
4.2.3 利用TensorFlow Hub 實現(xiàn)模型 .77
4.2.4 定義輸出 78
4.2.5 輸出映射到純文本格式 79
4.2.6 評估:創(chuàng)建一個混淆矩陣 .81
4.2.7 小結 83
4.3 使用tf.keras.applications 模塊獲得預訓練模型 83
4.3.1 利用tf.keras.applications 實現(xiàn)模型 83
4.3.2 微調(diào)tf.keras.applications 的模型 85
4.4 總結 86
第5 章 流式攝取數(shù)據(jù)管道 89
5.1 使用text_dataset_from_directory 函數(shù)流式處理文本文件 .90
5.1.1 下載文本數(shù)據(jù)并建立字典 .90
5.1.2 創(chuàng)建數(shù)據(jù)管道 92
5.1.3 檢查數(shù)據(jù)集 93
5.1.4 小結 94
5.2 使用flow_from_dataframe 方法利用文件列表流式處理圖像 94
5.2.1 下載圖像并創(chuàng)建目錄95
5.2.2 創(chuàng)建數(shù)據(jù)攝取管道 96
5.2.3 檢查數(shù)據(jù)集 99
5.2.4 構建和訓練tf.keras 模型 .100
5.3 使用from_tensor_slices 方法流式處理NumPy 數(shù)組 101
5.3.1 加載示例數(shù)據(jù)和庫 .102
5.3.2 檢查NumPy 數(shù)組 103
5.3.3 為NumPy 數(shù)據(jù)建立輸入管道 104
5.4 總結 .106
第6 章 模型創(chuàng)建風格 107
6.1 使用符號式API .108
6.1.1 加載CIFAR-10 圖像 .108
6.1.2 檢查標簽分布 110
6.1.3 檢查圖像 . 111
6.1.4 構建數(shù)據(jù)管道 113
6.1.5 批處理數(shù)據(jù)集進行訓練 114
6.1.6 構建模型 . 115
6.2 理解繼承 118
6.3 使用命令式API .121
6.4 選擇API 124
6.5 使用內(nèi)置訓練循環(huán) 125
6.6 創(chuàng)建和使用自定義訓練循環(huán) 126
6.6.1 創(chuàng)建循環(huán)的元素 126
6.6.2 在自定義訓練循環(huán)中集成所有元素 128
6.7 總結 .130
第7 章 監(jiān)視訓練過程 133
7.1 回調(diào)對象 134
7.1.1 ModelCheckpoint 134
7.1.2 EarlyStopping 142
7.1.3 小結 144
7.2 TensorBoard .144
7.2.1 由本地Jupyter Notebook 調(diào)用TensorBoard 150
7.2.2 由本地命令終端調(diào)用TensorBoard .151
7.2.3 由Colab Notebook 調(diào)用TensorBoard 151
7.2.4 使用TensorBoard 可視化顯示模型過擬合 .152
7.2.5 使用TensorBoard 可視化學習過程 153
7.3 總結 .155
第8 章 分布式訓練 157
8.1 數(shù)據(jù)并行化 158
8.1.1 異步參數(shù)服務器 159
8.1.2 同步全歸約 160
8.2 使用類tf.distribute.MirroredStrategy 161
8.2.1 創(chuàng)建分布式訓練 163
8.2.2 利用tf.distribute.MirroredStrategy 使用GPU 集群 167
8.2.3 小結 173
8.3 Horovod API 173
8.3.1 實現(xiàn)Horovod API 的代碼模式 .174
8.3.2 封裝模型架構 175
8.3.3 封裝數(shù)據(jù)分離和分片過程 176
8.3.4 工作節(jié)點間的參數(shù)同步 177
8.3.5 模型檢查點回調(diào) 178
8.3.6 聚合梯度的分布式優(yōu)化器 178
8.3.7 使用Horovod API 的分布式訓練 179
8.4 總結 .186
第9 章 提供TensorFlow 模型服務. 187
9.1 模型序列化 187
9.1.1 將模型保存為h5 格式 195
9.1.2 將模型保存為pb 格式 196
9.1.3 選擇模型格式 198
9.2 TensorFlow Serving .199
9.3 總結 .206
第10 章 改善建模體驗:公平性評估和超參數(shù)調(diào)優(yōu) . 207
10.1 模型公平性 208
10.1.1 模型訓練和評估 210
10.1.2 公平性評估212
10.1.3 顯示Fairness Indicators.214
10.2 超參數(shù)調(diào)優(yōu) 221
10.2.1 整數(shù)列表作為超參數(shù) 222
10.2.2 項選擇作為超參數(shù) 223
10.2.3 浮點值作為超參數(shù) 223
10.3 端到端超參數(shù)調(diào)優(yōu) .223
10.4 總結 231