内容簡介
本書介紹如何有效地使用谷歌的深度學習開源架構TensorFlow,還将實作不同的深度學習網絡。本書除了對一些常見的模型進行了理論介紹,還給出了完整的實作代碼,不僅能夠對深度學習初學者進行理論與實踐的指導,還能為開發人員提供程式設計借鑒。
作者簡介
Antonio Gulli
企業上司和軟體部門高管,具備創新精神和執行力,并樂于發現和管理全球高科技人才。他是搜尋引擎、線上服務、機器學習、資訊檢索、資料分析以及雲計算等方面的專家。目前,他在谷歌華沙擔任網站主管和雲計算主管,推動Serverless、Kubernetes和Google Cloud UX等項目在歐洲的發展。
Amita Kapoor
印度德裡大學電子學系副教授。她在過去的20年裡一直在教授神經網絡課程。她于1996年取得電子學碩士學位,并于2011年獲得博士學位。在攻讀博士學位期間,她獲得了著名的DAAD獎學金,這筆獎金資助了她在德國卡爾斯魯厄理工學院的部分研究工作。她曾獲得2008年度國際光電子大會頒發的最佳演講獎。
前言
本書介紹如何有效地使用Google的開源架構TensorFlow進行深度學習。你将實作不同的深度學習網絡,如卷積神經網絡(CNN)、循環神經網絡(RNN)、深度Q learning網絡(DQN)和生成對抗網絡(GAN),并将學習如何使用TensorFlow的進階封裝工具Keras。
你将了解如何使用不同的深層神經架構來執行複雜的任務,并在一些常用資料集(如MNIST、CIFAR-10、Youtube8m等)上了解不同DNN的性能,不僅可以了解TensorFlow支援的不同移動和嵌入式平台,還可以了解如何為深度學習應用程式搭建雲平台。你将深入了解TPU架構,以及它們将如何影響DNN的未來。
學完本書,你将了解深度學習實踐技術,能夠獨立開發現實世界中的一些應用,開展如強化學習、GAN、自動編碼機等領域的研究。
閱讀本書前的準備工作
為更好地學習本書,你需要安裝Python 3.5版本(https://www.continuum.io/
downloads)以及TensorFlow(www.tensorflow.org)。建議使用以下硬體配置:
CPU架構:x86_64
系統記憶體:8
GB~32 GB
CPU:4~8
核
GPU:可選,最低NVDIA
GTX 650
讀者對象
本書主要面向想要定期執行機器學習任務的
資料科學家、
機器學習從業者和
深度學習愛好者。對深度神經網絡已有了解并希望獲得CNN和RNN等方面實踐經驗的人會發現本書很有用。
本書結構
在這本書中,你會發現幾個頻繁出現的小标題(準備工作、具體做法、解讀分析、更多内容、拓展閱讀),具體含義如下。
準備工作這部分主要介紹需要做什麼,并介紹如何安裝所需的軟體并進行初步設定。
具體做法這部分包括實作相應功能的具體步驟。
解讀分析這部分通常包含對具體步驟的詳細解釋。
更多内容這部分是擴充知識,以使讀者對其有更多的了解。
拓展閱讀這部分将列出一些相關的網址。
下載下傳示例代碼
本書的示例代碼,可以從http://www.packtpub.com通過個人賬号下載下傳,也可以通路華章圖書官網http://www.hzbook.com,通過注冊并登入個人賬号下載下傳。
勘誤和支援
由于譯者水準有限,特别擔心未能完美傳達原作者的意思,建議有條件的讀者去閱讀英文原著。
緻謝
感謝每位讀者對本書的關注和信任。在LinkedIn和Facebook上收到的評論數量讓我感到誠惶誠恐:每一位讀者都為本書的改進提供了巨大的幫助。也要感謝以下各位在寫作過程中給予的支援:Susana、Ewa、Ignacy、Dawid、Max、Jarek、Jerzy、Nina、Laura、Antonella、Eric、Ettore、Francesco、Liubov、Marco、Fabio、Giacomo、Saskia、Christina、Wieland和 Yossi。非常感謝我的合作者Amita,以及她的寶貴意見和建議。特别感謝本書的審校者Eric Brewer、Corrado Zoccolo和Sujit Pal審校了整本書的内容。特别感謝我的經理Eyal在寫作過程中對我的支援與信任。Charlotte Menora
(http://bistrocharlotte.pl/)是位于華沙的一家酒吧,工作之餘我在那裡寫作了本書的部分章節。這是一個鼓舞人心的地方,如果你通路波蘭,一定不要錯過華沙這個現代化的酷炫城市。最後,非常感謝Packt的整個編輯團隊,尤其是Tushar
Gupta和Tejas Limkar的支援以及不斷的督促和提醒。感謝你們的耐心。
我試圖在這本書中總結我在深度神經網絡領域學到的知識。我以一種讓讀者容易了解和運用的方式呈現,是以本書的主要動力來自于你——讀者。感謝這本書的每一位讀者,是你們激勵着我不斷前行,尤其是在我懶惰的時候。我還要感謝加爾各答大學的Parongama Sen教授在1994年向我介紹了這個主題,還有我的朋友Nirjara Jain和Shubha Swaminathan在大學圖書館裡與我讨論阿西莫夫、他的故事以及未來神經網絡将改變社會的預見。非常感謝我的合作者Antonio Guili的寶貴意見,以及本書的審校者Narotam Singh和Nick McClure對全書内容精心審閱并重新檢查代碼。最後,非常感謝Packt的整個編輯團隊,尤其是Tushar
Gupta和Tejas Limkar的支援以及不斷的督促和提醒。
Narotam Singh(審校者)
我想感謝許多幫助我的人,特别是:我的妻子Ermelinda,多年來一直支援我緻力于計算機科學研究; Marco Vanneschi教授,向我介紹美麗的分布式系統世界;我在Google的第一任經理 Peter Dickman,他讓我走上了正确的職業生涯,我每天都在和同僚們一起學習
目錄
第1章 TensorFlow簡介
1
1.1 引言
1.2 TensorFlow安裝
2
1.3 Hello world 6
1.4 了解TensorFlow程式結構
8
1.5 常量、變量和占位符 10
1.6 使用TensorFlow 執行矩陣操作 15
1.7 使用資料流圖 17
1.8 從0.x遷移到1.x 18
1.9 使用XLA提升運算性能 19
1.10 調用CPU/GPU裝置
21
1.11 TensorFlow與深度學習 24
1.12 DNN問題需要的Python包 28
第2章 回歸
30
2.1 引言
2.2 選擇損失函數 31
2.3 TensorFlow中的優化器 33
2.4 讀取CSV檔案和資料預處理 36
2.5 房價估計——簡單線性回歸 39
2.6 房價估計——多元線性回歸 42
2.7 MNIST資料集的邏輯回歸
45
第3章 神經網絡——感覺機 50
3.1 引言
50
3.2 激活函數 52
3.3 單層感覺機 58
3.4 計算反向傳播算法的梯度 60
3.5 使用MLP實作MNIST分類器 63
3.6 使用MLP逼近函數來預測波士頓房價 66
3.7 調整超參數 71
3.8 進階API——Keras 72
第4章 卷積神經網絡 75
4.1 引言
75
4.2 建立一個ConvNet來分類手寫MNIST數字
79
4.3 建立一個ConvNet來分類CIFAR-10資料集
84
4.4 用VGG19做風格遷移的圖像重繪 87
4.5 使用預訓練的VGG16網絡進行遷移學習 96
4.6 建立DeepDream網絡
100
第5章 進階卷積神經網絡 105
5.1 引言
105
5.2 為情感分析建立一個ConvNet 106
5.3 檢驗VGG預建網絡學到的濾波器 109
5.4 使用 VGGNet、ResNet、Inception和Xception分類圖像
113
5.5 重新利用預建深度學習模型進行特征提取 125
5.6 用于遷移學習的深層InceptionV3網絡
126
5.7 使用擴張ConvNet、WaveNet和 NSynth生成音樂
129
5.8 關于圖像的問答 134
5.9 利用預訓練網絡進行視訊分類的6種方法
140
第6章 循環神經網絡 144
6.1 引言
144
6.2 神經機器翻譯——seq2seq RNN訓練
150
6.3 神經機器翻譯——seq2seq RNN推理
156
6.4 你所需要的是注意力—另一個seq2seq RNN例子
157
6.5 使用RNN像莎士比亞一樣寫作 161
6.6 基于RNN學習預測比特币價格 165
6.7 多對一和多對多的RNN例子
174
第7章 無監督學習 176
7.1 引言
176
7.2 主成分分析 176
7.3 k均值聚類 181
7.4 自組織映射 186
7.5 受限玻爾茲曼機 191
7.6 基于RBM的推薦系統 196
7.7 用DBN進行情緒檢測 198
第8章 自動編碼機 205
8.1 引言
205
8.2 标準自動編碼機 207
8.3 稀疏自動編碼機 212
8.4 去噪自動編碼機 217
8.5 卷積自動編碼機 221
8.6 堆疊自動編碼機 225
第9章 強化學習 231
9.1 引言
231
9.2 學習OpenAI Gym 232
9.3 用神經網絡智能體玩Pac-Man遊戲
235
9.4 用Q learning玩Cart-Pole平衡遊戲
238
9.5 用DQN玩Atari遊戲 244
9.6 用政策梯度網絡玩Pong遊戲
252
第10章 移動端計算 259
10.1 引言
259
10.2 安裝适用于macOS和Android的TensorFlow mobile 260
10.3 玩轉TensorFlow和Android的示例
265
10.4 安裝适用于macOS和iPhone的TensorFlow mobile 268
10.5 為移動裝置優化TensorFlow計算圖
271
10.6 為移動裝置分析TensorFlow計算圖
273
10.7 為移動裝置轉換TensorFlow計算圖
275
第11章 生成式模型和CapsNet 278
11.1 引言
278
11.2 學習使用簡單GAN虛構MNIST圖像
284
11.3 學習使用DCGAN虛構MNIST圖像
289
11.4 學習使用DCGAN虛構名人面孔和其他資料集 294
11.5 實作變分自動編碼機 297
11.6 學習使用膠囊網絡擊敗MNIST前期的最新成果 305
第12章 分布式TensorFlow和雲深度學習 319
12.1 引言
319
12.2 在GPU上使用TensorFlow 322
12.3 玩轉分布式TensorFlow:多個GPU和一個CPU 323
12.4 玩轉分布式TensorFlow:多伺服器 324
12.5 訓練分布式TensorFlow MNIST分類器
326
12.6 基于Docker使用TensorFlow Serving 328
12.7 使用計算引擎在谷歌雲平台上運作分布式TensorFlow 330
12.8 在谷歌CloudML上運作分布式TensorFlow 333
12.9 在Microsoft Azure上運作分布式TensorFlow 334
12.10 在Amazon AWS上運作分布式TensorFlow 337
附錄A 利用AutoML學會學習(元學習) 342
附錄B TensorFlow處理器 350