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