Python神經(jīng)網(wǎng)絡入門與實戰(zhàn)
本書從神經(jīng)網(wǎng)絡的基礎知識講起,逐步深入到Python進階實戰(zhàn),通過對各種實用的第三方庫進行詳細講解與實戰(zhàn)運用,讓讀者不但能夠更加深入地了解神經(jīng)網(wǎng)絡,而且能夠簡單高效地搭建自己的神經(jīng)網(wǎng)絡,即使沒有專業(yè)背景知識也能輕松入門神經(jīng)網(wǎng)絡。
本書分為 11章,涵蓋的主要內(nèi)容有神經(jīng)網(wǎng)絡概述,神經(jīng)網(wǎng)絡基礎知識,計算機程序的特點,神經(jīng)網(wǎng)絡優(yōu)化算法,搭 建Python環(huán)境,Python基礎知識,深度學習框架PyTorch基礎知識,NumPy簡介與使用,OpenCV簡介與使用,OS遍歷文件夾,Python中Matplotlib可視化繪圖,Lenet-5、AlexNet、VGG16網(wǎng)絡模型,回歸問題和分類問題,貓狗識別程序開發(fā),驗證碼識別程序開發(fā),過擬合問題與解決方法,梯度消失與爆炸,加速神經(jīng)網(wǎng)絡訓練的方法,人工智能的未來發(fā)展趨勢等。
本書內(nèi)容通俗易懂,案例豐富,實用性強,特別適合神經(jīng)網(wǎng)絡的零基礎入門讀者閱讀,也適合 Python 程序員、PyTorch愛好者等閱讀。
王凱,西安電子科技大學人工智能學院計算機專業(yè)研究生,曾參加過全國大學生驗證碼識別大賽并獲得三等獎,長期從事神經(jīng)網(wǎng)絡的研究,具有豐富的開發(fā)實踐經(jīng)驗。
第1章 神經(jīng)網(wǎng)絡概述 1
1.1 神經(jīng)網(wǎng)絡簡介 2
1.1.1 神經(jīng)網(wǎng)絡的定義 2
1.1.2 神經(jīng)網(wǎng)絡可解決的問題 3
1.2 神經(jīng)網(wǎng)絡的靈感來源 3
1.2.1 對人類認知過程的傳統(tǒng)認知 3
1.2.2 對人類認知過程的現(xiàn)代認知 4
1.2.3 神經(jīng)元連接的靈感 4
1.3 為什么要學習神經(jīng)網(wǎng)絡 4
1.3.1 神經(jīng)網(wǎng)絡的發(fā)展 4
1.3.2 學習神經(jīng)網(wǎng)絡有什么用 5
1.4 怎樣學習神經(jīng)網(wǎng)絡 6
1.4.1 選擇一門編程語言 6
1.4.2 對算法的理解 8
1.4.3 寫博客 8
1.5 小結 9
第2章 神經(jīng)網(wǎng)絡基礎知識 10
2.1 感知器模型 11
2.1.1 神經(jīng)元細胞的本質(zhì) 11
2.1.2 感知器模型的構建 11
2.2 訓練感知器 13
2.2.1 計算誤差 13
2.2.2 誤差反向傳播 13
2.2.3 訓練示例 14
2.3 激活函數(shù) 15
2.3.1 激活函數(shù)的定義 16
2.3.2 Sigmoid函數(shù) 16
2.3.3 Tanh函數(shù) 17
2.3.4 ReLU函數(shù) 18
2.4 損失函數(shù) 20
2.4.1 損失函數(shù)的定義及作用 20
2.4.2 絕對值損失函數(shù) 20
2.4.3 均方差損失函數(shù) 21
2.4.4 交叉熵損失函數(shù) 23
2.5 單層神經(jīng)網(wǎng)絡 23
2.5.1 單層神經(jīng)網(wǎng)絡的結構 23
2.5.2 單層神經(jīng)網(wǎng)絡的參數(shù) 25
2.5.3 單層神經(jīng)網(wǎng)絡的前向傳播過程 25
2.6 訓練單層神經(jīng)網(wǎng)絡 26
2.6.1 梯度下降算法 26
2.6.2 反向傳播算法 29
2.6.3 理解反向傳播 31
2.7 多層神經(jīng)網(wǎng)絡 32
2.7.1 多層神經(jīng)網(wǎng)絡的結構 33
2.7.2 參數(shù)向量化 33
2.8 卷積神經(jīng)網(wǎng)絡 36
2.8.1 卷積神經(jīng)網(wǎng)絡簡介 36
2.8.2 卷積核 37
2.8.3 卷積操作 38
2.8.4 池化操作 41
2.8.5 卷積層 42
2.8.6 池化層 43
2.8.7 全連接層 44
2.9 小結 44
第3章 實戰(zhàn)前的預備知識 46
3.1 計算機程序 47
3.1.1 計算機程序簡介 47
3.1.2 計算機程序的執(zhí)行過程 48
3.1.3 計算機程序的開發(fā)流程 49
3.1.4 計算機程序的特點 50
3.2 加速訓練 51
3.2.1 CPU與GPU 51
3.2.2 歸一化 52
3.2.3 其他學習算法 53
3.2.4 Mini-Batch 54
3.3 構建樣本集 55
3.3.1 Tensor類型 55
3.3.2 訓練集 56
3.3.3 測試集 57
3.3.4 交叉驗證集 58
3.4 小結 59
第4章 Python入門與實戰(zhàn) 60
4.1 Python簡介 61
4.1.1 什么是Python 61
4.1.2 Python的特點 61
4.1.3 為什么要用Python搭建神經(jīng)網(wǎng)絡 62
4.2 搭建Python環(huán)境 63
4.2.1 安裝Python 3.7(Anaconda) 63
4.2.2 安裝CUDA 10.0 66
4.2.3 安裝PyCharm 68
4.2.4 PyCharm新建項目 70
4.2.5 PyCharm的一些基本設置 71
4.2.6 PyCharm運行程序 73
4.3 Python基礎 74
4.3.1 輸入語句與輸出語句 74
4.3.2 變量的作用與定義 76
4.3.3 變量的命名規(guī)則和習慣 78
4.3.4 運算符 79
4.3.5 數(shù)據(jù)類型 81
4.3.6 if語句 82
4.3.7 循環(huán)語句 83
4.3.8 函數(shù) 85
4.3.9 類 85
4.3.10 列表和元組 87
4.3.11 引入模塊 87
4.3.12 注釋 88
4.4 編寫第一個感知器程序 88
4.4.1 需求分析 88
4.4.2 主程序 89
4.4.3 感知器前向傳播程序 90
4.4.4 誤差計算程序 91
4.4.5 運行結果 91
4.5 小結 92
第5章 深度學習框架PyTorch入門與實戰(zhàn) 93
5.1 PyTorch簡介 94
5.1.1 什么是PyTorch 94
5.1.2 PyTorch的特點 94
5.1.3 為什么要選擇PyTorch搭建神經(jīng)網(wǎng)絡 95
5.2 安裝PyTorch框架 95
5.2.1 conda命令 96
5.2.2 選擇PyTorch版本進行安裝 97
5.3 PyTorch基礎 99
5.3.1 構建輸入/輸出 99
5.3.2 構建網(wǎng)絡結構 100
5.3.3 定義優(yōu)化器與損失函數(shù) 102
5.3.4 保存和加載網(wǎng)絡 103
5.4 小實戰(zhàn):用PyTorch搭建一個神經(jīng)網(wǎng)絡以學習異或運算 104
5.4.1 需求分析 104
5.4.2 訓練程序 105
5.4.3 測試程序 107
5.5 小結 109
第6章 Python搭建神經(jīng)網(wǎng)絡進階 110
6.1 NumPy簡介 111
6.1.1 NumPy的基本功能 111
6.1.2 NumPy的數(shù)據(jù)類型 111
6.2 NumPy的使用 112
6.2.1 安裝NumPy 112
6.2.2 創(chuàng)建數(shù)組 112
6.2.3 存儲和讀取數(shù)組 114
6.2.4 索引和切片 115
6.2.5 重塑數(shù)組 116
6.2.6 數(shù)組的運算 117
6.3 OpenCV簡介 119
6.3.1 OpenCV概述 119
6.3.2 OpenCV的基本功能 120
6.4 OpenCV的使用 120
6.4.1 安裝OpenCV 121
6.4.2 圖像讀取與顯示 121
6.4.3 圖像縮放 122
6.4.4 色彩空間轉換 123
6.4.5 直方圖均衡化 125
6.4.6 圖像保存 126
6.5 文件夾中文件的遍歷 127
6.5.1 OS模塊簡介 128
6.5.2 path模塊 128
6.5.3 刪除文件 129
6.5.4 創(chuàng)建文件夾 129
6.5.5 文件遍歷 130
6.6 構建和讀取數(shù)據(jù)集 132
6.6.1 構建數(shù)據(jù)集 132
6.6.2 讀取數(shù)據(jù)集 135
6.7 PyTorch中卷積神經(jīng)網(wǎng)絡有關的接口 136
6.7.1 卷積層接口 136
6.7.2 反卷積層接口 137
6.8 小結 137
第7章 實戰(zhàn)1:回歸問題和分類問題 139
7.1 Python中繪圖方法簡介 140
7.1.1 Matplotlib簡介 140
7.1.2 安裝Matplotlib 140
7.1.3 散點圖繪制 141
7.1.4 繪圖顯示的小設置 144
7.1.5 曲線繪制 145
7.1.6 設置坐標軸 146
7.1.7 動態(tài)繪圖 148
7.2 回歸問題 149
7.3 用Python搭建一個解決回歸問題的神經(jīng)網(wǎng)絡 151
7.3.1 準備工作 151
7.3.2 構建網(wǎng)絡 152
7.3.3 訓練網(wǎng)絡 153
7.3.4 完整程序 154
7.4 分類問題 155
7.5 用Python搭建一個解決分類問題的神經(jīng)網(wǎng)絡 156
7.5.1 準備工作 156
7.5.2 構建網(wǎng)絡 159
7.5.3 訓練網(wǎng)絡 160
7.5.4 可視化 161
7.5.5 完整程序 162
7.6 小結 164
第8章 實戰(zhàn)2:貓狗識別問題 165
8.1 實戰(zhàn)目標 166
8.1.1 目標分析 166
8.1.2 樣本集 167
8.2 實現(xiàn)思路 167
8.2.1 構建樣本集 168
8.2.2 測試樣本集 169
8.2.3 構建網(wǎng)絡 170
8.2.4 訓練網(wǎng)絡 171
8.2.5 測試網(wǎng)絡 172
8.3 完整程序及運行結果 172
8.3.1 構建樣本集程序 172
8.3.2 測試樣本集程序 174
8.3.3 構建網(wǎng)絡程序 175
8.3.4 訓練網(wǎng)絡程序 177
8.3.5 可視化訓練過程 179
8.3.6 測試網(wǎng)絡程序 180
8.3.7 模擬實際運用 181
8.4 對結果的思考 182
8.4.1 訓練集和測試集準確率的對比 182
8.4.2 準確率低的原因 183
8.4.3 訓練過程的啟示 184
8.5 小結 184
第9章 一些經(jīng)典的網(wǎng)絡 185
9.1 LeNet-5網(wǎng)絡模型 186
9.1.1 LeNet-5網(wǎng)絡簡介 186
9.1.2 LeNet-5網(wǎng)絡結構 186
9.1.3 三維卷積 188
9.1.4 多維卷積 190
9.1.5 LeNet-5代碼實現(xiàn) 191
9.2 AlexNet網(wǎng)絡模型 192
9.2.1 AlexNet網(wǎng)絡簡介 193
9.2.2 AlexNet網(wǎng)絡結構 193
9.2.3 Same卷積 194
9.2.4 Softmax分類器 196
9.2.5 AlexNet代碼實現(xiàn) 197
9.3 VGG16網(wǎng)絡模型 198
9.3.1 VGG16網(wǎng)絡簡介 198
9.3.2 VGG16網(wǎng)絡結構 198
9.4 小結 200
第10章 實戰(zhàn)3:驗證碼識別問題 201
第11章 優(yōu)化網(wǎng)絡 220