書籍介紹
內容簡介
本書共12章,分為3篇。第1篇深度學習與TensorFlow基礎,包括快速了解人工智慧與TensorFlow、搭建開發環境、TensorFlow基本開發步驟、TensorFlow編程基礎、識別圖中模糊的手寫數字等內容;第2篇深度學習基礎——神經網路,介紹了神經網路的基礎模型,包括單個神經元、多層神經網路、卷積神經網路、循環神經網路、自編碼網路等內容;第3篇深度學習進階,是對基礎網路模型的靈活運用與自由組合,是對前面知識的綜合及拔高,包括深度神經網路和對抗神經網路兩章內容。
30秒極速了解本書精華內容
1. 深度學習與TensorFlow基礎
快速了解人工智慧與TensorFlow
搭建開發環境
TensorFlow基本開發步驟——以邏輯回歸擬合二維數據為例
TensorFlow編程基礎
識別圖中模糊的手寫數字(實例21)
2. 深度學習基礎——神經網路
單個神經元
多層神經網路——解決非線性問題
卷積神經網路——解決參數太多問題
循環神經網路——具有記憶功能的網路
自編碼網路——能夠自學習樣本特徵的網路
3. 深度學習進階
深度神經網路
對抗神經網路(GAN)
作者介紹
李金洪,長期拼搏在一線的高級軟體工程師。先後擔任過CAD算法工程師、手機遊戲主程、架構師、項目經理、CTO、部門經理、資深產品總監和CEO等職務。現任代碼醫生工作室主程式設計師。精通C、C++、彙編、Python、Java和Go等程式語言;擅長神經網路、算法、協定分析、逆向和移動網際網路安全架構等技術。在深度學習領域中參與過某移動網際網路後台的OCR項目、某娛樂節目機器人的語音識別和聲紋識別項目,以及活體檢測、金融和安全等領域的多個AI項目。發布過兩套關於CNTK深度學習框架的視頻教程。
目錄
配套學習資源
前言
第1篇 深度學習與TensorFlow基礎
第1章 快速了解人工智慧與TensorFlow2
1.1 什麼是深度學習2
1.2 TensorFlow是做什麼的3
1.3 TensorFlow的特點4
1.4 其他深度學習框架特點及介紹5
1.5 如何通過本書學好深度學習6
1.5.1 深度學習怎么學6
1.5.2 如何學習本書7
第2章 搭建開發環境8
2.1 下載及安裝Anaconda開發工具8
2.2 在Windows平台下載及安裝TensorFlow11
2.3 GPU版本的安裝方法12
2.3.1 安裝CUDA軟體包12
2.3.2 安裝cuDNN庫13
2.3.3 測試顯示卡14
2.4 熟悉Anaconda 3開發工具15
2.4.1 快速了解Spyder16
2.4.2 快速了解Jupyter Notebook18
第3章 TensorFlow基本開發步驟——以邏輯回歸擬合二維數據為例19
3.1 實例1:從一組看似混亂的數據中找出y≈2x的規律19
3.1.1 準備數據20
3.1.2 搭建模型21
3.1.3 疊代訓練模型23
3.1.4 使用模型25
3.2 模型是如何訓練出來的25
3.2.1 模型里的內容及意義25
3.2.2 模型內部的數據流向26
3.3 了解TensorFlow開發的基本步驟27
3.3.1 定義輸入節點的方法27
3.3.2 實例2:通過字典類型定義輸入節點28
3.3.3 實例3:直接定義輸入節點28
3.3.4 定義“學習參數”的變數29
3.3.5 實例4:通過字典類型定義“學習參數”29
3.3.6 定義“運算”29
3.3.7 最佳化函式,最佳化目標30
3.3.8 初始化所有變數30
3.3.9 疊代更新參數到最優解31
3.3.10 測試模型31
3.3.11 使用模型31
第4章 TensorFlow編程基礎32
4.1 編程模型32
4.1.1 了解模型的運行機制33
4.1.2 實例5:編寫hello world程式演示session的使用34
4.1.3 實例6:演示with session的使用35
4.1.4 實例7:演示注入機制35
4.1.5 建立session的其他方法36
4.1.6 實例8:使用注入機制獲取節點36
4.1.7 指定GPU運算37
4.1.8 設定GPU使用資源37
4.1.9 保存和載入模型的方法介紹38
4.1.10 實例9:保存/載入線性回歸模型38
4.1.11 實例10:分析模型內容,演示模型的其他保存方法40
4.1.12 檢查點(Checkpoint)41
4.1.13 實例11:為模型添加保存檢查點41
4.1.14 實例12:更簡便地保存檢查點44
4.1.15 模型操作常用函式總結45
4.1.16 TensorBoard可視化介紹45
4.1.17 實例13:線性回歸的TensorBoard可視化46
4.2 TensorFlow基礎類型定義及操作函式介紹48
4.2.1 張量及操作49
4.2.2 算術運算函式55
4.2.3 矩陣相關的運算56
4.2.4 複數操作函式58
4.2.5 規約計算59
4.2.6 分割60
4.2.7 序列比較與索引提取61
4.2.8 錯誤類62
4.3 共享變數62
4.3.1 共享變數用途62
4.3.2 使用get-variable獲取變數63
4.3.3 實例14:演示get_variable和Variable的區別63
4.3.4 實例15:在特定的作用域下獲取變數65
4.3.5 實例16:共享變數功能的實現66
4.3.6 實例17:初始化共享變數的作用域67
4.3.7 實例18:演示作用域與操作符的受限範圍68
4.4 實例19:圖的基本操作70
4.4.1 建立圖70
4.4.2 獲取張量71
4.4.3 獲取節點操作72
4.4.4 獲取元素列表73
4.4.5 獲取對象73
4.4.6 練習題74
4.5 配置分散式TensorFlow74
4.5.1 分散式TensorFlow的角色及原理74
4.5.2 分布部署TensorFlow的具體方法75
4.5.3 實例20:使用TensorFlow實現分散式部署訓練75
4.6 動態圖(Eager)81
4.7 數據集(tf.data)82
第5章 識別圖中模糊的手寫數字(實例21)83
5.1 導入圖片數據集84
5.1.1 MNIST數據集介紹84
5.1.2 下載並安裝MNIST數據集85
5.2 分析圖片的特點,定義變數87
5.3 構建模型87
5.3.1 定義學習參數87
5.3.2 定義輸出節點88
5.3.3 定義反向傳播的結構88
5.4 訓練模型並輸出中間狀態參數89
5.5 測試模型90
5.6 保存模型91
5.7 讀取模型92
第2篇 深度學習基礎——神經網路
第6章 單個神經元96
6.1 神經元的擬合原理96
6.1.1 正向傳播98
6.1.2 反向傳播98
6.2 激活函式——加入非線性因素,解決線性模型缺陷99
6.2.1 Sigmoid函式99
6.2.2 Tanh函式100
6.2.3 ReLU函式101
6.2.4 Swish函式103
6.2.5 激活函式總結103
6.3 softmax算法——處理分類問題103
6.3.1 什麼是softmax104
6.3.2 softmax原理104
6.3.3 常用的分類函式105
6.4 損失函式——用真實值與預測值的距離來指導模型的收斂方向105
6.4.1 損失函式介紹105
6.4.2 TensorFlow中常見的loss函式106
6.5 softmax算法與損失函式的綜合套用108
6.5.1 實例22:交叉熵實驗108
6.5.2 實例23:one_hot實驗109
6.5.3 實例24:sparse交叉熵的使用110
6.5.4 實例25:計算loss值110
6.5.5 練習題111
6.6 梯度下降——讓模型逼近最小偏差111
6.6.1 梯度下降的作用及分類111
6.6.2 TensorFlow中的梯度下降函式112
6.6.3 退化學習率——在訓練的速度與精度之間找到平衡113
6.6.4 實例26:退化學習率的用法舉例114
6.7 初始化學習參數115
6.8 單個神經元的擴展——Maxout網路116
6.8.1 Maxout介紹116
6.8.2 實例27:用Maxout網路實現MNIST分類117
6.9 練習題118
第7章 多層神經網路——解決非線性問題119
7.1 線性問題與非線性問題119
7.1.1 實例28:用線性單分邏輯回歸分析腫瘤是良性還是惡性的119
7.1.2 實例29:用線性邏輯回歸處理多分類問題123
7.1.3 認識非線性問題129
7.2 使用隱藏層解決非線性問題130
7.2.1 實例30:使用帶隱藏層的神經網路擬合異或操作130
7.2.2 非線性網路的可視化及其意義133
7.2.3 練習題135
7.3 實例31:利用全連線網路將圖片進行分類136
7.4 全連線網路訓練中的最佳化技巧137
7.4.1 實例32:利用異或數據集演示過擬合問題138
7.4.2 正則化143
7.4.3 實例33:通過正則化改善過擬合情況144
7.4.4 實例34:通過增大數據集改善過擬合145
7.4.5 練習題146
7.4.6 dropout——訓練過程中,將部分神經單元暫時丟棄146
7.4.7 實例35:為異或數據集模型添加dropout147
7.4.8 實例36:基於退化學習率dropout技術來擬合異或數據集149
7.4.9 全連線網路的深淺關係150
7.5 練習題150
第8章 卷積神經網路——解決參數太多問題151
8.1 全連線網路的局限性151
8.2 理解卷積神經網路152
8.3 網路結構153
8.3.1 網路結構描述153
8.3.2 卷積操作155
8.3.3 池化層157
8.4 卷積神經網路的相關函式158
8.4.1 卷積函式tf.nn.conv2d158
8.4.2 padding規則介紹159
8.4.3 實例37:卷積函式的使用160
8.4.4 實例38:使用卷積提取圖片的輪廓165
8.4.5 池化函式tf.nn.max_pool(avg_pool)167
8.4.6 實例39:池化函式的使用167
8.5 使用卷積神經網路對圖片分類170
8.5.1 CIFAR介紹171
8.5.2 下載CIFAR數據172
8.5.3 實例40:導入並顯示CIFAR數據集173
8.5.4 實例41:顯示CIFAR數據集的原始圖片174
8.5.5 cifar10_input的其他功能176
8.5.6 在TensorFlow中使用queue176
8.5.7 實例42:協調器的用法演示178
8.5.8 實例43:為session中的佇列加上協調器179
8.5.9 實例44:建立一個帶有全局平均池化層的卷積神經網路180
8.5.10 練習題183
8.6 反卷積神經網路183
8.6.1 反卷積神經網路的套用場景184
8.6.2 反卷積原理184
8.6.3 實例45:演示反卷積的操作185
8.6.4 反池化原理188
8.6.5 實例46:演示反池化的操作189
8.6.6 實例47:演示gradients基本用法192
8.6.7 實例48:使用gradients對多個式子求多變數偏導192
8.6.8 實例49:演示梯度停止的實現193
8.7 實例50:用反卷積技術復原卷積網路各層圖像195
8.8 善用函式封裝庫198
8.8.1 實例51:使用函式封裝庫重寫CIFAR卷積網路198
8.8.2 練習題201
8.9 深度學習的模型訓練技巧201
8.9.1 實例52:最佳化卷積核技術的演示201
8.9.2 實例53:多通道卷積技術的演示202
8.9.3 批量歸一化204
8.9.4 實例54:為CIFAR圖片分類模型添加BN207
8.9.5 練習題209
第9章 循環神經網路——具有記憶功能的網路210
9.1 了解RNN的工作原理210
9.1.1 了解人的記憶原理210
9.1.2 RNN網路的套用領域212
9.1.3 正向傳播過程212
9.1.4 隨時間反向傳播213
9.2 簡單RNN215
9.2.1 實例55:簡單循環神經網路實現——裸寫一個退位減法器215
9.2.2 實例56:使用RNN網路擬合回聲信號序列220
9.3 循環神經網路(RNN)的改進225
9.3.1 LSTM網路介紹225
9.3.2 窺視孔連線(Peephole)228
9.3.3 帶有映射輸出的STMP230
9.3.4 基於梯度剪輯的cell230
9.3.5 GRU網路介紹230
9.3.6 Bi-RNN網路介紹231
9.3.7 基於神經網路的時序類分類CTC232
9.4 TensorFlow實戰RNN233
9.4.1 TensorFlow中的cell類233
9.4.2 通過cell類構建RNN234
9.4.3 實例57:構建單層LSTM網路對MNIST數據集分類239
9.4.4 實例58:構建單層GRU網路對MNIST數據集分類240
9.4.5 實例59:創建動態單層RNN網路對MNIST數據集分類240
9.4.6 實例60:靜態多層LSTM對MNIST數據集分類241
9.4.7 實例61:靜態多層RNN-LSTM連線GRU對MNIST數據集分類242
9.4.8 實例62:動態多層RNN對MNIST數據集分類242
9.4.9 練習題243
9.4.10 實例63:構建單層動態雙向RNN對MNIST數據集分類243
9.4.11 實例64:構建單層靜態雙向RNN對MNIST數據集分類244
9.4.12 實例65:構建多層雙向RNN對MNIST數據集分類246
9.4.13 實例66:構建動態多層雙向RNN對MNIST數據集分類247
9.4.14 初始化RNN247
9.4.15 最佳化RNN248
9.4.16 實例67:在GRUCell中實現LN249
9.4.17 CTC網路的loss——ctc_loss251
9.4.18 CTCdecoder254
9.5 實例68:利用BiRNN實現語音識別255
9.5.1 語音識別背景255
9.5.2 獲取並整理樣本256
9.5.3 訓練模型265
9.5.4 練習題272
9.6 實例69:利用RNN訓練語言模型273
9.6.1 準備樣本273
9.6.2 構建模型275
9.7 語言模型的系統學習279
9.7.1 統計語言模型279
9.7.2 詞向量279
9.7.3 word2vec281
9.7.4 實例70:用CBOW模型訓練自己的word2vec283
9.7.5 實例71:使用指定侯選採樣本訓練word2vec293
9.7.6 練習題296
9.8 處理