從零開始構建深度前饋神經網絡(Python+TensorFlow 2.x)

張光華

  • 出版商: 機械工業
  • 出版日期: 2021-12-15
  • 售價: $419
  • 貴賓價: 9.5$398
  • 語言: 簡體中文
  • 頁數: 236
  • 裝訂: 平裝
  • ISBN: 7111696158
  • ISBN-13: 9787111696155
  • 相關分類: DeepLearning 深度學習TensorFlow
  • 立即出貨

買這商品的人也買了...

商品描述

2016年,一隻阿法狗(AlphaGo)為全世界打開了一條窄窄的門縫,
通往未來之路就此展現。
通過超強硬件和大量的數據積累,人工智能浪潮第三次興起。
借助人工智能技術,公安部門可以輕鬆抓捕潛逃多年的罪犯,
“AI換臉”已經成為普通用戶的娛樂方式之一,智慧城市、
自動駕駛開始在多個城市有試點……
GPT-3、Switch Transformer開啟了新的時代,而智源研究院的悟道2.0參量則高達1.75萬億。
訓練有素的結構生物學家花費上千萬美元歷時多年的研究結果,
AlphaFold v2.0在朝夕之間便完成預測。
今天,主動擁抱新變化,積極學習新知識,愈發顯得重要。
很多人積極投入熱情、時間和金錢後,沒能堅持多久就中斷了學習。
也有很多同學對此表示觀望甚至放棄,覺得憑自己的基礎不足以把握這次機會。
誠然,僅憑一本書很難幫助普通讀者深刻理解並熟練掌握深度學習中的全部知識,
因此“AI精研社”規劃了一個系列圖書,給出完整的解決方案,希望能幫助讀者循序漸進、
平滑而高效地成長為合格的人工智能算法實踐者(practitioners)。
本書是“人工智能與大數據技術大講堂”系列圖書的第2部。
本書從體驗手寫數字(k近鄰算法)識別開始,
循序漸進地不斷加深讀者對神經網絡模型的理解,進而可以設計並實現自己的模型。
另外,本書通過Python+NumPy從零開始構建神經網絡模型,
強化讀者對算法思想的理解,並通過TensorFlow構建模型來驗證讀者親手從零構建的版本。
前饋神經網絡是深度學習的重要知識,其核心思想是反向傳播與梯度下降。
本書從極易理解的示例開始,逐漸深入,
幫助讀者充分理解並熟練掌握反向傳播與梯度下降算法,為後續學習打下堅實的基礎。
本書延續理論與實踐並重的風格,先以圖文方式講解算法思想,再以Python+NumPy實現算法,然後再給出TensorFlow實現的版本,
幫助讀者不斷加深對核心的算法理解,同時提昇實際動手能力,
從而鍛煉將算法思想轉化為程序代碼的能力。

作者簡介

張光華 博士畢業於重慶大學,碩士畢業於中國科學技術大學。山西省“1331工程”大數據智能診療產業學院負責人,山西省工信廳“山西省健康大數據AI聯合實驗室”負責人。中國醫藥教育協會智能醫學專委會委員,中國醫藥教育協會智能眼科學組常委。主要研究方向為量子點微型多光譜成像技術、醫學圖像處理和機器學習。現已發表包括醫學、圖像處理和機器學習等領域的SCI期刊及國際會議論文多篇,參與多項中國和歐洲科學基金項目。致力於將深度學習技術與臨床醫學進行深度融合,並推廣和落地。

目錄大綱

前言
第1章  環境搭建 1
1.1  下載並安裝Python 1
1.2  Python軟件環境管理工具Anaconda 2
1.2.1  下載Anaconda 2
1.2.2  安裝Anaconda 4
1.2.3  驗證Anaconda的安裝 6
1.3  通過TUNA加速Anaconda 8
1.3.1  清華大學開源軟件鏡像站TUNA 8
1.3.2  在Windows中設置Anaconda鏡像通道 10
1.3.3  在類UNIX中設置Anaconda鏡像通道 11
1.4  使用Jupyter Notebook 12
1.4.1  通過“開始”菜單啟動Jupyter Notebook 12
1.4.2  通過命令行啟動Jupyter Notebook 13
1.4.3  新建並重命名Notebook 14
1.4.4  安裝Jupyter Notebook插件 16
1.5  安裝TensorFlow 2.6 17
1.5.1  通過Notebook cell安裝TensorFlow 2.6 17
1.5.2  通過pip install命令離線安裝TensorFlow 18
1.6  小結與補充說明 20

第2章  使用k近鄰算法識別手寫數字圖像 22
2.1  手寫數字圖像數據集MNIST 22
2.1.1  使用TensorFlow加載MNIST 23
2.1.2  使用scikit-learn加載MNIST 24
2.2  分類器與準確率 25
2.3  k近鄰算法的基本思想 26
2.4  利用k-NN識別MNIST 27
2.4.1  劃分數據集 27
2.4.2  識別MNIST與模型評估 29
2.4.3  數據探查 30
2.4.4  性能優化 31
2.4.5  調參 32
2.4.6  最近鄰再探查 33
2.5  k-NN中的距離度量 33
2.6  小結與補充說明 34

第3章  感知機算法思想與實現 36
3.1  機器學習的基本分類 36
3.2  鳶尾花數據集iris 37
3.2.1  樣本特徵 37
3.2.2  樣本分類 38
3.2.3  構造簡化版iris數據集 39
3.3  感知機分類精簡版iris 42
3.3.1  極簡體驗感知機 42
3.3.2  感知機模型的數學表達 44
3.3.3  極簡體驗感知機學習算法 45
3.3.4  感知機學習算法的Python實現 47
3.3.5  損失函數與梯度(選修) 50
3.3.6  感知機代碼合併 51
3.4  感知機的實現類 53
3.4.1  構造器__init__() 53
3.4.2  預測方法predict() 54
3.4.3  更新模型參數update_params() 55
3.4.4  啟動訓練fit() 56
3.4.5  重構Perceptron類 58
3.5  小結與補充說明 59

第4章  對數機率回歸算法思想與實現 62
4.1  神經網絡結構示意圖 62
4.2  對數機率回歸的數學表達 63
4.3  對數機率函數的Python實現 64
4.4  對數機率回歸模型的損失函數 66
4.5  梯度下降法的數學表達(選修) 69
4.6  梯度下降法的Python實現 72
4.7  對數機率回歸模型的Python實現 73
4.8  使用對數機率回歸模型分類鳶尾花 75
4.8.1  使用LR分類精簡版iris數據集 75
4.8.2  統計準確率 76
4.8.3  構造簡化版iris數據集 77
4.8.4  劃分函數train_test_split() 78
4.8.5  劃分iris數據集 79
4.8.6  使用對數機率回歸模型分類iris數據集 80
4.9  小結與補充說明 80

第5章  使用TensorFlow實現對數機率回歸 82
5.1  深入LR參數更新 82
5.1.1  改進LogisticRegression類的update_weights()方法 82
5.1.2  改進LogisticRegression類的fit()方法 83
5.1.3  使用LR分類鳶尾花數據集並查看日誌 84
5.2  使用TensorFlow自動求梯度 87
5.2.1  極簡體驗TensorFlow自動求梯度 87
5.2.2  NumPy數組的形狀與維數 89
5.2.3  使用TensorFlow計算矩陣乘積 90
5.2.4  使用TensorFlow計算LR模型的激活值 90
5.2.5  使用代碼定義LR模型的損失函數 92
5.2.6  使用TensorFlow求LR模型的損失函數對激活值的梯度 93
5.2.7  手動計算LR模型的損失函數對權值的梯度 93
5.2.8  使用TensorFlow求LR模型的損失函數對參數的梯度 94
5.3  使用自動求梯度實現LR 97
5.3.1  更新TensorFlow變量 97
5.3.2  實現LogisticRegressionV2類 98
5.3.3  使用LogisticRegressionV2分類精簡版iris 101
5.3.4  極簡體驗模型調參 102
5.4  使用Sequential實現LR 102
5.5  小結與補充說明 106

第6章  LR圖像分類 107
6.1  簡化版MNIST數據集 107
6.1.1  生成索引數組 108
6.1.2  NumPy數組切片(取元素) 110
6.1.3  數據探查 111
6.1.4  使用np.concatenate()合併數組 113
6.1.5  構建簡化版MNIST數據集 115
6.2  LR分類簡化版MNIST 116
6.2.1  數據預處理之歸一化 116
6.2.2  數據預處理之扁平化 117
6.2.3  LR分類簡化版MNIST 119
6.2.4  修復LogisticRegression類 121
6.2.5  測試修復 123
6.3  小批量梯度下降 124
6.3.1  向量化編程 124
6.3.2  構造小批量樣本 125
6.3.3  計算LR損失函數關於線性模型的導數dz 126
6.3.4  計算LR損失函數關於權值向量的導數dw 128
6.3.5  計算LR損失函數關於偏置量的導數db 130
6.3.6  小批量模型訓練 133
6.3.7  小批量LR分類簡化版MNIST 134
6.3.8  查看模型預測失誤的樣本 136
6.4  新問題與修復 137
6.4.1  發現問題與復現問題 138
6.4.2  原因分析及解決方法 138
6.4.3  向量化predict()方法 140
6.4.4  修復LogisticRegression類 141
6.4.5  評估模型方法evaluate() 142
6.4.6  提前終止控制開關 143
6.4.7  提前終止策略方法(選修) 145
6.4.8  重構LogisticRegression類 146
6.5  小結與補充說明 148

第7章  代碼重構與計算圖簡介 150
7.1  構建神經網絡的基本流程 150
7.1.1  模型架構及超參數 150
7.1.2  初始化模型參數 152
7.1.3  前向傳播、反向傳播與計算圖 152
7.2  重構LogisticRegression類 153
7.2.1  重新構造簡化版MNIST數據集 153
7.2.2  探查簡化版MNIST數據集 154
7.2.3  LR分類簡化版MNIST 155
7.2.4  重構LogisticRegression類 156
7.2.5  測試重構版LogisticRegression類 157
7.3  使用TensorFlow定義並訓練模型 158
7.4  體驗TensorBoard 161
7.5  隨機化 161
7.5.1  使用np.random.random()生成隨機數 162
7.5.2  隨機初始化權值向量 162
7.5.3  使用np.random.shuffle()混淆數組 164
7.5.4  隨機訪問樣本 165
7.5.5  隨機梯度下降 166
7.5.6  小批量隨機梯度下降 168
7.6  小結與補充說明 168

第8章  兩層神經網絡 170
8.1  單層神經網絡之局限性 170
8.1.1  線性可分 170
8.1.2  線性不可分 170
8.2  兩層神經網絡前向傳播 172
8.2.1  部分記號說明 172
8.2.2  矩陣乘積的代碼實現 174
8.2.3  隱層前向傳播的數學表達 175
8.2.4  隱層前向傳播的代碼實現 176
8.2.5  輸出層前向傳播的數學表達 178
8.2.6  輸出層前向傳播的代碼實現 179
8.3  兩層神經網絡反向傳播 180
8.3.1  輸出層反向傳播的數學表達 181
8.3.2  輸出層反向傳播的代碼實現 182
8.3.3  隱層反向傳播的數學表達 183
8.3.4  隱層反向傳播的代碼實現 184
8.4  兩層神經網絡實現異或運算 185
8.5  實現MLPClassifier類 187
8.5.1  構造器__init__() 188
8.5.2  參數初始化initialize_params() 188
8.5.3  前向傳播forward_propagation() 189
8.5.4  反向傳播backward_propagation() 189
8.5.5  參數更新update_params() 190
8.5.6  模型輸出 190
8.5.7  模型啟動訓練fit() 191
8.5.8  測試MLPClassifier類 192
8.6  小結與補充說明 193

第9章  多層神經網絡 194
9.1  多層感知機部分記號說明 194
9.2  重構多層神經網絡 195
9.2.1  參數初始化 195
9.2.2  前向傳播 197
9.2.3  反向傳播參數更新 198
9.2.4  測試新版本 200
9.3  重構MLPClassifier類 201
9.3.1  構造器__init__() 201
9.3.2  參數初始化initialize_params() 202
9.3.3  前向傳播forward_propagation() 202
9.3.4  反向傳播參數更新 203
9.3.5  模型輸出 204
9.3.6  模型啟動訓練fit() 205
9.3.7  測試MLPClassifier類 206
9.3.8  修復MLPClassifier類 206
9.3.9  測試修復 208
9.4  使用TensorFlow實現多層神經網絡 209
9.4.1  使用TensorFlow解決異或問題 209
9.4.2  使用TensorFlow驗證MLPClassifier類 210
9.5  使用MLPClassifier類實現對數機率回歸 213
9.5.1  使用LR實現邏輯與函數 213
9.5.2  使用MLPClassifier類實現對數機率回歸 214
9.5.3  使用TensorFlow驗證代碼實現 215
9.6  小結與補充說明 216
附錄  標量、向量與矩陣簡介 218