Python神經(jīng)網(wǎng)絡(luò)入門與實戰(zhàn)
本書從神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)知識講起,逐步深入到Python進階實戰(zhàn),通過對各種實用的第三方庫進行詳細講解與實戰(zhàn)運用,讓讀者不但能夠更加深入地了解神經(jīng)網(wǎng)絡(luò),而且能夠簡單高效地搭建自己的神經(jīng)網(wǎng)絡(luò),即使沒有專業(yè)背景知識也能輕松入門神經(jīng)網(wǎng)絡(luò)。
本書分為 11章,涵蓋的主要內(nèi)容有神經(jīng)網(wǎng)絡(luò)概述,神經(jīng)網(wǎng)絡(luò)基礎(chǔ)知識,計算機程序的特點,神經(jīng)網(wǎng)絡(luò)優(yōu)化算法,搭 建Python環(huán)境,Python基礎(chǔ)知識,深度學(xué)習(xí)框架PyTorch基礎(chǔ)知識,NumPy簡介與使用,OpenCV簡介與使用,OS遍歷文件夾,Python中Matplotlib可視化繪圖,Lenet-5、AlexNet、VGG16網(wǎng)絡(luò)模型,回歸問題和分類問題,貓狗識別程序開發(fā),驗證碼識別程序開發(fā),過擬合問題與解決方法,梯度消失與爆炸,加速神經(jīng)網(wǎng)絡(luò)訓(xùn)練的方法,人工智能的未來發(fā)展趨勢等。
本書內(nèi)容通俗易懂,案例豐富,實用性強,特別適合神經(jīng)網(wǎng)絡(luò)的零基礎(chǔ)入門讀者閱讀,也適合 Python 程序員、PyTorch愛好者等閱讀。
王凱,西安電子科技大學(xué)人工智能學(xué)院計算機專業(yè)研究生,曾參加過全國大學(xué)生驗證碼識別大賽并獲得三等獎,長期從事神經(jīng)網(wǎng)絡(luò)的研究,具有豐富的開發(fā)實踐經(jīng)驗。
第1章 神經(jīng)網(wǎng)絡(luò)概述 1
1.1 神經(jīng)網(wǎng)絡(luò)簡介 2
1.1.1 神經(jīng)網(wǎng)絡(luò)的定義 2
1.1.2 神經(jīng)網(wǎng)絡(luò)可解決的問題 3
1.2 神經(jīng)網(wǎng)絡(luò)的靈感來源 3
1.2.1 對人類認知過程的傳統(tǒng)認知 3
1.2.2 對人類認知過程的現(xiàn)代認知 4
1.2.3 神經(jīng)元連接的靈感 4
1.3 為什么要學(xué)習(xí)神經(jīng)網(wǎng)絡(luò) 4
1.3.1 神經(jīng)網(wǎng)絡(luò)的發(fā)展 4
1.3.2 學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)有什么用 5
1.4 怎樣學(xué)習(xí)神經(jīng)網(wǎng)絡(luò) 6
1.4.1 選擇一門編程語言 6
1.4.2 對算法的理解 8
1.4.3 寫博客 8
1.5 小結(jié) 9
第2章 神經(jīng)網(wǎng)絡(luò)基礎(chǔ)知識 10
2.1 感知器模型 11
2.1.1 神經(jīng)元細胞的本質(zhì) 11
2.1.2 感知器模型的構(gòu)建 11
2.2 訓(xùn)練感知器 13
2.2.1 計算誤差 13
2.2.2 誤差反向傳播 13
2.2.3 訓(xùn)練示例 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)絡(luò) 23
2.5.1 單層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu) 23
2.5.2 單層神經(jīng)網(wǎng)絡(luò)的參數(shù) 25
2.5.3 單層神經(jīng)網(wǎng)絡(luò)的前向傳播過程 25
2.6 訓(xùn)練單層神經(jīng)網(wǎng)絡(luò) 26
2.6.1 梯度下降算法 26
2.6.2 反向傳播算法 29
2.6.3 理解反向傳播 31
2.7 多層神經(jīng)網(wǎng)絡(luò) 32
2.7.1 多層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu) 33
2.7.2 參數(shù)向量化 33
2.8 卷積神經(jīng)網(wǎng)絡(luò) 36
2.8.1 卷積神經(jīng)網(wǎng)絡(luò)簡介 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 小結(jié) 44
第3章 實戰(zhàn)前的預(yù)備知識 46
3.1 計算機程序 47
3.1.1 計算機程序簡介 47
3.1.2 計算機程序的執(zhí)行過程 48
3.1.3 計算機程序的開發(fā)流程 49
3.1.4 計算機程序的特點 50
3.2 加速訓(xùn)練 51
3.2.1 CPU與GPU 51
3.2.2 歸一化 52
3.2.3 其他學(xué)習(xí)算法 53
3.2.4 Mini-Batch 54
3.3 構(gòu)建樣本集 55
3.3.1 Tensor類型 55
3.3.2 訓(xùn)練集 56
3.3.3 測試集 57
3.3.4 交叉驗證集 58
3.4 小結(jié) 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)絡(luò) 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的一些基本設(shè)置 71
4.2.6 PyCharm運行程序 73
4.3 Python基礎(chǔ) 74
4.3.1 輸入語句與輸出語句 74
4.3.2 變量的作用與定義 76
4.3.3 變量的命名規(guī)則和習(xí)慣 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 運行結(jié)果 91
4.5 小結(jié) 92
第5章 深度學(xué)習(xí)框架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)絡(luò) 95
5.2 安裝PyTorch框架 95
5.2.1 conda命令 96
5.2.2 選擇PyTorch版本進行安裝 97
5.3 PyTorch基礎(chǔ) 99
5.3.1 構(gòu)建輸入/輸出 99
5.3.2 構(gòu)建網(wǎng)絡(luò)結(jié)構(gòu) 100
5.3.3 定義優(yōu)化器與損失函數(shù) 102
5.3.4 保存和加載網(wǎng)絡(luò) 103
5.4 小實戰(zhàn):用PyTorch搭建一個神經(jīng)網(wǎng)絡(luò)以學(xué)習(xí)異或運算 104
5.4.1 需求分析 104
5.4.2 訓(xùn)練程序 105
5.4.3 測試程序 107
5.5 小結(jié) 109
第6章 Python搭建神經(jīng)網(wǎng)絡(luò)進階 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 色彩空間轉(zhuǎn)換 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 構(gòu)建和讀取數(shù)據(jù)集 132
6.6.1 構(gòu)建數(shù)據(jù)集 132
6.6.2 讀取數(shù)據(jù)集 135
6.7 PyTorch中卷積神經(jīng)網(wǎng)絡(luò)有關(guān)的接口 136
6.7.1 卷積層接口 136
6.7.2 反卷積層接口 137
6.8 小結(jié) 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 繪圖顯示的小設(shè)置 144
7.1.5 曲線繪制 145
7.1.6 設(shè)置坐標(biāo)軸 146
7.1.7 動態(tài)繪圖 148
7.2 回歸問題 149
7.3 用Python搭建一個解決回歸問題的神經(jīng)網(wǎng)絡(luò) 151
7.3.1 準(zhǔn)備工作 151
7.3.2 構(gòu)建網(wǎng)絡(luò) 152
7.3.3 訓(xùn)練網(wǎng)絡(luò) 153
7.3.4 完整程序 154
7.4 分類問題 155
7.5 用Python搭建一個解決分類問題的神經(jīng)網(wǎng)絡(luò) 156
7.5.1 準(zhǔn)備工作 156
7.5.2 構(gòu)建網(wǎng)絡(luò) 159
7.5.3 訓(xùn)練網(wǎng)絡(luò) 160
7.5.4 可視化 161
7.5.5 完整程序 162
7.6 小結(jié) 164
第8章 實戰(zhàn)2:貓狗識別問題 165
8.1 實戰(zhàn)目標(biāo) 166
8.1.1 目標(biāo)分析 166
8.1.2 樣本集 167
8.2 實現(xiàn)思路 167
8.2.1 構(gòu)建樣本集 168
8.2.2 測試樣本集 169
8.2.3 構(gòu)建網(wǎng)絡(luò) 170
8.2.4 訓(xùn)練網(wǎng)絡(luò) 171
8.2.5 測試網(wǎng)絡(luò) 172
8.3 完整程序及運行結(jié)果 172
8.3.1 構(gòu)建樣本集程序 172
8.3.2 測試樣本集程序 174
8.3.3 構(gòu)建網(wǎng)絡(luò)程序 175
8.3.4 訓(xùn)練網(wǎng)絡(luò)程序 177
8.3.5 可視化訓(xùn)練過程 179
8.3.6 測試網(wǎng)絡(luò)程序 180
8.3.7 模擬實際運用 181
8.4 對結(jié)果的思考 182
8.4.1 訓(xùn)練集和測試集準(zhǔn)確率的對比 182
8.4.2 準(zhǔn)確率低的原因 183
8.4.3 訓(xùn)練過程的啟示 184
8.5 小結(jié) 184
第9章 一些經(jīng)典的網(wǎng)絡(luò) 185
9.1 LeNet-5網(wǎng)絡(luò)模型 186
9.1.1 LeNet-5網(wǎng)絡(luò)簡介 186
9.1.2 LeNet-5網(wǎng)絡(luò)結(jié)構(gòu) 186
9.1.3 三維卷積 188
9.1.4 多維卷積 190
9.1.5 LeNet-5代碼實現(xiàn) 191
9.2 AlexNet網(wǎng)絡(luò)模型 192
9.2.1 AlexNet網(wǎng)絡(luò)簡介 193
9.2.2 AlexNet網(wǎng)絡(luò)結(jié)構(gòu) 193
9.2.3 Same卷積 194
9.2.4 Softmax分類器 196
9.2.5 AlexNet代碼實現(xiàn) 197
9.3 VGG16網(wǎng)絡(luò)模型 198
9.3.1 VGG16網(wǎng)絡(luò)簡介 198
9.3.2 VGG16網(wǎng)絡(luò)結(jié)構(gòu) 198
9.4 小結(jié) 200
第10章 實戰(zhàn)3:驗證碼識別問題 201
第11章 優(yōu)化網(wǎng)絡(luò) 220