編輯推薦
1.本書以TensorFlow為工具,從基礎的MNIST手寫體識別開始,介紹了基礎的捲積神經網絡、循環神經網絡,還包括正處於前沿的對抗生成網絡、深度強化學習等課題,代碼基於TensorFlow 1.4 .0 以上版本。
2.書中所有內容由21個可以動手實驗的項目組織起來,並在其中穿插TensorFlow的教學,讓你可以在實踐中比較輕鬆地學習到深度學習領域的基礎知識,掌握TensorFlow的使用方法,並累積豐富的深度學習實戰經驗。
3.透過本書,可以學到:
在動手實作中快速入門深度學習領域。
透過實驗快速掌握TensorFlow的操作方法。
掌握卷積神經網路、循環神經網路、對抗生成網路和深度強化學習等深度學習累積豐富的深度學習實戰項目,如影像分類、目標偵測、臉部辨識、影像生成、文字生成、序列分類、時間序列預測等。
學習TensorFlow的一些新特性,如TimeSeries模組、RNNCell等。
內容簡介
《21個專案玩轉深度學習-基於TensorFlow的實作詳解》以實作為導向,深入介紹了深度學習技術和TensorFlow框架程式設計內容。透過本書,讀者可以訓練自己的圖像辨識模型、進行目標檢測和人臉辨識、完成一個風格遷移應用,還可以使用神經網路生成圖像和文本,進行時間序列預測、搭建機器翻譯引擎,訓練機器玩遊戲。全書共包含21個項目,分為深度卷積網路、RNN網路、深度強化學習三個部分。讀者可以在自己動手實作的過程中找到學習的樂趣,了解演算法和程式框架的細節,讓學習深度學習演算法和TensorFlow的過程變得輕鬆和有效率。本書程式碼是基於TensorFlow 1.4以上版本,並介紹了TensorFlow中的一些新功能。
本書適合有一定機器學習基礎的學生、研究者或從業者閱讀,尤其是希望深入研究TensorFlow和深度學習演算法的資料工程師,也適合對人工智慧、深度學習感興趣的在校學生,以及希望進入大數據應用的研究者。
作者簡介
何之源,知乎專欄AI Insight作者。針對Tensorflow早期學習案例不足的情況,在網上撰寫了大量實踐文章與TensorFlow教程,教程風格清晰易懂又不失深度,獲得了廣大讀者的肯定。熱愛編程,在人工智慧和深度學習領域有豐富的實踐經驗。
目錄
第1章MNIST機器學習入門1
1.1 MNIST資料集2
1.1.1 簡介2
1.1.2 實驗:將MNIST資料集儲存為圖片5
1.1.3 影像標籤的獨熱(one-hot)表示6
1.2 利用TensorFlow辨識MNIST 8
1.2.1 Softmax回歸8
1.2.2 兩層卷積網路分類14
1.3 總結18
第2章CIFAR-10與ImageNet影像辨識19
2.1 CIFAR-10資料集20
2.1.1 CIFAR-10簡介20
2.1.2 下載CIFAR-10資料21
2.1.3 TensorFlow的資料讀取機制23
2.1.4 實驗:將CIFAR-10資料集保存為圖片形式30
2.2 利用TensorFlow訓練CIFAR-10辨識模型34
2.2.1 資料增強(Data Augmentation) 34
2.2.2 CIFAR-10辨識模型36
2.2.3 訓練模型39
2.2.4 在TensorFlow中查看訓練進度39
2.2.5 測試模型效果42
2.3 ImageNet影像辨識模型44
2.3.1 ImageNet資料集簡介44
2.3.2 歷代ImageNet影像辨識模型45
2.4 總結49
第3章打造自己的影像辨識模型50
3.1 微調(Fine-tune)的原理51
3.2 資料準備52
3.3 使用TensorFlow Slim微調模型56
3.3.1 下載TensorFlow Slim的原始碼56
3.3.2 定義新的datasets檔57
3.3.3 準備訓練資料夾59
3.3.4 開始訓練60
3.3.5 訓練程序行為62
3.3.6 驗證模型正確率63
3.3.7 TensorBoard可視化與超參數選擇64
3.3.8 匯出模型並對單張圖片進行辨識65
3.4 總結69
第4章Deep Dream模型70
4.1 Deep Dream的技術原理71
4.2 TensorFlow中的Deep Dream模型實踐73
4.2.1 導入Inception模型73
4.2.2 產生原始的Deep Dream影像76
4.2.3 產生更大尺寸的Deep Dream影像78
4.2.4 產生更高品質的Deep Dream影像82
4.2.5 *終的Deep Dream模型87
4.3 總結90
第5章深度學習中的目標偵測91
5.1 深度學習中目標偵測的原理92
5.1.1 R-CNN的原理92
5.1.2 SPPNet的原理94
5.1.3 Fast R-CNN的原理97
5.1.4 Faster R-CNN的原理98
5.2 TensorFlow Object Detection API 101
5.2.1 安裝TensorFlow Object Detection API 101
5.2.2 執行已經訓練好的模型103
5.2.3 訓練新的模型109
5.2.4 匯出模型並預測單張圖113
5.3 總結114
第6章人臉偵測和人臉辨識115
6.1 MTCNN的原理116
6.2 使用深度卷積網路擷取特徵121
6.2.1 三元組損失(Triplet Loss)的定義123
6.2.2 中心損失(Center Loss)的定義123
6.3 使用特徵設計應用125
6.4 在TensorFlow中實現人臉辨識126
6.4.1 專案環境設定126
6.4.2 LFW人臉資料庫127
6.4.3 LFW資料庫上的人臉偵測與對齊128
6.4.4 使用已有模型驗證LFW資料庫準確率129
6.4.5 在自己的資料上使用已有模型130
6.4.6 重新訓練新模型133
6.4.7 三元組損失和中心損失的定義138
6.5 總結140
第7章圖像風格遷移141
7.1 影像風格遷移的原理142
7.1.1 原始影像風格遷移的原理142
7.1.2 快速影像風格遷移的原理148
7.2 在TensorFlow中實現快速風格遷移149
7.2.1 使用預訓練模型150
7.2.2 訓練自己的模型153
7.2.3 在TensorBoard中監控訓練狀況154
7.2.4 專案實作細節157
7.3 總結162
第8章GAN和DCGAN入門163
8.1 GAN的原理164
8.2 DCGAN的原理166
8.3 在TensorFlow中用DCGAN生成影像169
8.3.1 產生MNIST影像170
8.3.2 使用自己的資料集訓練171
8.3.3 程式結構分析:如何將影像讀入模型173
8.3.4 程式結構分析:視覺化方法177
8.4 總結180
第9章pix2pix模型與自動上色技術181
9.1 cGAN的原理182
9.2 pix2pix模型的原理184
9.3 TensorFlow中的pix2pix模型187
9.3.1 執行已有的資料集187
9.3.2 建立自己的資料集191
9.4 使用TensorFlow為灰階影像自動上色194
9.4.1 為食物圖片上色194
9.4.2 為動漫圖片進行上色196
9.5 總結198
第10章超解析度:如何讓影像變得更清晰199
10.1 資料預處理與訓練200
10.1.1 去除錯誤圖片200
10.1.2 將影像裁切到統一大小202
10.1.3 為程式碼新增新的操作202
10.2 總結209
第11章CycleGAN與非配對影像轉換210
11.1 CycleGAN的原理211
11.2 在TensorFlow中用訓練CycleGAN模型213
11.2.1 下載資料集並訓練213
11.2.2 使用自己的資料進行訓練217
11.3 程序結構分析220
11.4 總結224
第12章RNN基本結構與Char RNN文本生成225
12.1 RNN的原理226
12.1.1 經典RNN的結構226
12.1.2 N VS 1 RNN的結構229
12.1.3 1 VS N RNN的結構230
12.2 LSTM的原理231
12.3 Char RNN的原理235
12.4 TensorFlow中RNN的實作方式237
12.4.1 實現RNN的基本單元:RNNCell 238
12.4.2 對RNN進行堆疊:MultiRNNCell 239
12.4.3 注意點:BasicRNNCell和BasicLSTMCell的output 240
12.4.4 使用tf.nn.dynamic_rnn展開時間維度241
12.5 使用TensorFlow實作Char RNN 242
12.5.1 定義輸入資料243
12.5.2 定義多層LSTM模型244
12.5.3 定義損失245
12.5.4 訓練模型與生成文字246
12.5.5 更多參數說明250
12.5.6 運行自己的資料250
12.6 總結251
第13章序列分類問題詳解252
13.1 N VS 1的RNN結構253
13.2 數列分類問題與資料生成254
13.3 在TensorFlow定義RNN分類模型258
13.3.1 定義模型前的準備工作258
13.3.2 定義RNN分類模型259
13.3.3 定義損失並進行訓練261
13.4 模型的推廣262
13.5 總結263
第14章詞的向量表示:word2vec與詞嵌入264
14.1 為什麼需要做詞嵌入265
14.2 詞嵌入的原理266
14.2.1 CBOW實現詞嵌入的原理266
14.2.2 Skip-Gram實現詞嵌入的原理269
14.3 在TensorFlow中實作詞嵌入270
14.3.1 下載資料集270
14.3.2 製作詞表272
14.3.3 產生每步驟的訓練樣本274
14.3.4 定義模型276
14.3.5 執行訓練279
14.3.6 可視化281
14.4 與第12章的對比284
14.5 總結285
第15章在TensorFlow中進行時間序列預測286
15.1 時間序列問題的一般形式287
15.2 用TFTS讀入時間序列資料287
15.2.1 從Numpy數組讀入時間序列資料288
15.2.2 從CSV檔案讀入時間序列資料291
15.3 使用AR模型預測時間序列293
15.3.1 AR模型的訓練293
15.3.2 AR模型的驗證與預測295
15.4 使用LSTM模型預測時間序列297
15.4.1 LSTM模型中的單變量時間序列預測297
15.4.2 LSTM模型中的多變量時間序列預測299
15.5 總結301
第16章神經網路機器翻譯技術302
16.1 Encoder-Decoder模型的原理303
16.2 注意力機制(Attention) 305
16.3 使用TensorFlow NMT建構神經網路翻譯引擎309
16.3.1 例:將越南語翻譯為英語309
16.3.2 建構中英翻譯引擎313
16.4 TensorFlow NMT源碼簡介317
16.5 總結319
第17章看圖說話:將圖像轉換為文字320
17.1 Image Caption技術綜述321
17.1.1 從Encoder-Decoder結構談起321
17.1.2 將Encoder-Decoder應用到Image Caption任務上322
17.1.3 對Encoder-Decoder的改良1:加入Attention機制323
17.1.4 對Encoder-Decoder的改進2:加入高層語意325
17.2 在TensorFlow中實作Image Caption 327
17.2.1 下載代碼327
17.2.2 環境準備328
17.2.2 編譯和資料準備328
17.2.3 訓練和驗證330
17.2.4 測試單張圖片331
17.3 總結332
第18章強化學習入門之Q 333
18.1 強化學習中的幾個重要概念334
18.2 Q Learning的原理與實驗336
18.2.1 環境定義336
18.2.2 Q函數338
18.2.3 Q函數的學習策略339
18.2.4 ?-greedy策略341
18.2.5 簡單的Q Learning範例341
18.2.6 更複雜的情況342
18.3 總結343
第19章強化學習入門之SARSA演算法344
19.1 SARSA 演算法的原理345
19.1.1 透過與Q Learning比較學習SARSA演算法345
19.1.2 off-policy與on-policy 346
19.2 SARSA 演算法的實作347
19.3 總結348
第20章深度強化學習:Deep Q Learning 349
20.1 DQN演算法的原理350
20.1.1 問題簡介350
20.1.2 Deep Q Network 351
20.1.3 訓練方法352
20.2 在TensorFlow中運行DQN演算法353
20.2.1 安裝依賴庫353
20.2.2 訓練355
20.2.3 測試356
20.3 在TensorFlow中DQN演算法的實現分析357
20.4 總結360
第21章策略梯度(Policy Gradient)演算法361
21.1 策略梯度(Policy Gradient)演算法的原理362
21.1.1 Cartpole遊戲362
21.1.2 策略網絡(Policy Network) 363
21.1.3 訓練策略網364
21.2 在TensorFlow中實作策略梯度演算法365
21.2.1 初始化365
21.2.2 定義策略網路366
21.2.3 訓練367
21.3 總結371
前言/序言
我們正處於一個日新月異、快速變革的時代,層出不窮的新科技每天都在衝擊和改變我們的生活。人工智慧無疑是其中最受關注、也是影響最深遠的科技領域。它為電腦插上了翅膀,演變出許多從前根本無法想像的新技術、新應用。 AlphaGoZero,一台沒有任何先驗知識的人工智慧機器,可以在幾天內透過自我博弈成長為世界第一的圍棋大師,超越人類幾千年積累的經驗;風格遷移應用能夠自動將用戶的照片轉變為著名的繪畫藝術風格;機器可以在零點幾秒鐘內完成翻譯,把一種語言翻譯成另一種語言。此外,有關人臉辨識、自動駕駛等新技術的應用也都紛紛開始落實。在過去的幾年內,人工智慧技術不僅在學術上取得了巨大的突破,也開始走向尋常百姓家,真正為人們的生活提供便利。
本書主要為讀者介紹這次人工智慧浪潮最重要的組成部分——深度學習技術,使用的程式框架是Google的TensorFlow。借助於Google巨大的影響力,TensorFlow一發布就引起了廣泛的關注,目前(截止至2017年底)TensorFlow在Github上已經有了8萬4千多個Star,是所有深度學習框架中最多的。
鑑於目前市場上已有很多深度學習和TensorFlow的入門書籍,以下我們將重談一談本書與它們的不同之處,主要有以下幾點:
實踐、應用導向。深度學習需要深厚的數理基礎,對於初學者來說不是很友善。本書希望從實作出發,用具體的例子來引導讀者學習深度學習技術和TensorFlow程式設計技巧。我們主要從實用性和趣味性兩個方面考量,選擇了21個實踐項目,其中既有MNIST圖像識別這樣的入門項目,也有目標檢測、人臉辨識、時間序列預測這樣的實用性項目,還有一些諸如DeepDream這樣的趣味性項目。讀者可以在實踐中找到樂趣,逐漸進步,讓學習深度學習和TensorFlow的過程不再那麼痛苦。
清晰、有深度的介紹。在寫書過程中,我們盡量用簡單的語言來描述演算法的原理,做到清晰有條理。此外,深度學習是一門還在快速發展的新技術,限於篇幅所限,很多內容不能完全寫到書中,我們在大部分章節的末尾列出了拓展閱讀材料,有興趣的讀者可以參考拓展材料進一步學習細節知識。
基於TensorFlow1.4版本。 TensorFlow的發展非常迅速,本書程式碼全部基於TensorFlow最新的1.4版本(包括1.4.0和1.4.1),並介紹了TensorFlow的一些新特性,如TimeSeries模組(1.3版本添加)、新的MultiRNNCell函數( 1.2版本更改)等。本書的程式碼會在以下Github位址上提供,並會隨新的TensorFlow版本的發布而同步更新:https://github.com/hzy46/Deep-Learning-21-Examples。
本書程式碼建議的運作環境為:Ubuntu14.04,Python2.7、TensorFlow1.4.0。請盡量使用類Unix系統和Python2來運行本書的程式碼。
本書主要內容
本書共包括21章,內容編曲如下:
第1到第11章主要介紹深度卷積神經相關的題項。其中,第1~3章屬於入門章節,主要討論深度學習中最基礎的影像辨識問題。第4~7章討論了其他電腦視覺相關的實踐案例,如目標辨識、人臉辨識、影像風格遷移等。最後,8~11章介紹了GAN模型和它的幾個重要變體。
第12到第17章主要介紹RNN、LSTM相關的項目。 RNN、LSTM通常用來處理序列型數據,這裡第12章是一個入門章節,會詳細介紹RNN和LSTM的原理、實作方法和一個應用實例-CharRNN。第13到17章討論一些更複雜也更具體的案例,如序列分類、詞嵌入表示、時間序列預測、機器翻譯等。
第18到第21章主要介紹強化學習相關的項目。作為基礎,第18、19章分別介紹了相對簡單的QLearning和SARSA演算法,第20章和第21章介紹了更複雜的DQN和策略梯度演算法。
如何閱讀本書
在閱讀此書前,讀者應了解Linux系統的基本操作,並會使用Python進行簡單的編程,此外讀者還需具備基礎的機器學習知識。這本書章節的安排是依據讀者對深度學習的了解循序漸進設立的,建議初學者從前至後閱讀。由於深度學習和TensorFlow都不大易理解,我建議讀者分幾遍閱讀本書:
第一遍先簡單的瀏覽一下,看看書中都有哪些實作項目。當對基本的概念有初步的理解時,就可以嘗試配置開發環境。
第二遍,從前至後,閱讀各章中演算法的原理,並執行對應的實作專案。在這個過程中,希望讀者能在自己動手的過程中找到學習的樂趣。讀者可以對照原始碼和書中的內容,深入學習各個模型的細節,此外還可以根據自己的需求對程式碼進行修改。本書會涉及到大量TensorFlow中的函數,由於篇幅限制,不可能將每一個函數都介紹一遍,書中只會對比較重要的函數進行介紹,讀者可以參考TensorFlow的官方文檔,查看其他函數的功能說明。
第三遍再根據需要對照源程式看相關章節。此外,讀者還可以參考章節最後的拓展閱讀來作進一步學習。最後,如果你是深度學習和TensorFlow的精通者,也可以根據需要直接跳讀到相關章節,查閱你需要的內容。
致謝
我首先要感謝我的父母,是他們將我養育成人,父母永遠健康快樂是我最大的心願。
感謝網路時代,感謝網路上數不清的優秀開發者和博主,也感謝谷歌的開源精神,讓我們可以如此緊跟時代最前沿的技術,並為技術的進步做出自己微薄的貢獻。
我還要真誠地感謝電子工業出版社對這本書的認可和興趣。感謝電子工業出版社的孫學瑛女士,她的熱情推動最終促成了我與電子工業出版社的合作。感謝孫亞東編輯,他對本書的重視和誠懇的建議,在寫作過程中給了我莫大的幫助。
最後,感謝劉婧源同學給本書的寶貴的意見。
由於本人程度有限,書中不足及錯誤之處在所難免,敬請專家和讀者給予批評指正。如果您想和我進行技術交流,可以發送意見回饋郵件至hzydl21@163.com,也可在知乎上找到我:https://www.zhihu.com/people/he-zhi-yuan-16/ ,此外還可以造訪書友論壇http://forum.broadview.com.cn。
何之源
2018年1月1日