本书从神经网络的基础知识讲起,逐步深入到Python进阶实战,通过对各种实用的第三方库进行详细讲解与实战运用,让读者不但能够更加深入地了解神经网络,而且能够简单高效地搭建自己的神经网络,即使没有专业背景知识也能轻松入门神经网络。
本书分为 11章,涵盖的主要内容有神经网络概述,神经网络基础知识,计算机程序的特点,神经网络优化算法,搭 建Python环境,Python基础知识,深度学习框架PyTorch基础知识,NumPy简介与使用,OpenCV简介与使用,OS遍历文件夹,Python中Matplotlib可视化绘图,Lenet-5、AlexNet、VGG16网络模型,回归问题和分类问题,猫狗识别程序开发,验证码识别程序开发,过拟合问题与解决方法,梯度消失与爆炸,加速神经网络训练的方法,人工智能的未来发展趋势等。
本书内容通俗易懂,案例丰富,实用性强,特别适合神经网络的零基础入门读者阅读,也适合 Python 程序员、PyTorch爱好者等阅读。
王凯,西安电子科技大学人工智能学院计算机专业研究生,曾参加过全国大学生验证码识别大赛并获得三等奖,长期从事神经网络的研究,具有丰富的开发实践经验。
第1章 神经网络概述 1
1.1 神经网络简介 2
1.1.1 神经网络的定义 2
1.1.2 神经网络可解决的问题 3
1.2 神经网络的灵感来源 3
1.2.1 对人类认知过程的传统认知 3
1.2.2 对人类认知过程的现代认知 4
1.2.3 神经元连接的灵感 4
1.3 为什么要学习神经网络 4
1.3.1 神经网络的发展 4
1.3.2 学习神经网络有什么用 5
1.4 怎样学习神经网络 6
1.4.1 选择一门编程语言 6
1.4.2 对算法的理解 8
1.4.3 写博客 8
1.5 小结 9
第2章 神经网络基础知识 10
2.1 感知器模型 11
2.1.1 神经元细胞的本质 11
2.1.2 感知器模型的构建 11
2.2 训练感知器 13
2.2.1 计算误差 13
2.2.2 误差反向传播 13
2.2.3 训练示例 14
2.3 激活函数 15
2.3.1 激活函数的定义 16
2.3.2 Sigmoid函数 16
2.3.3 Tanh函数 17
2.3.4 ReLU函数 18
2.4 损失函数 20
2.4.1 损失函数的定义及作用 20
2.4.2 绝对值损失函数 20
2.4.3 均方差损失函数 21
2.4.4 交叉熵损失函数 23
2.5 单层神经网络 23
2.5.1 单层神经网络的结构 23
2.5.2 单层神经网络的参数 25
2.5.3 单层神经网络的前向传播过程 25
2.6 训练单层神经网络 26
2.6.1 梯度下降算法 26
2.6.2 反向传播算法 29
2.6.3 理解反向传播 31
2.7 多层神经网络 32
2.7.1 多层神经网络的结构 33
2.7.2 参数向量化 33
2.8 卷积神经网络 36
2.8.1 卷积神经网络简介 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章 实战前的预备知识 46
3.1 计算机程序 47
3.1.1 计算机程序简介 47
3.1.2 计算机程序的执行过程 48
3.1.3 计算机程序的开发流程 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入门与实战 60
4.1 Python简介 61
4.1.1 什么是Python 61
4.1.2 Python的特点 61
4.1.3 为什么要用Python搭建神经网络 62
4.2 搭建Python环境 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 变量的命名规则和习惯 78
4.3.4 运算符 79
4.3.5 数据类型 81
4.3.6 if语句 82
4.3.7 循环语句 83
4.3.8 函数 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入门与实战 93
5.1 PyTorch简介 94
5.1.1 什么是PyTorch 94
5.1.2 PyTorch的特点 94
5.1.3 为什么要选择PyTorch搭建神经网络 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 构建网络结构 100
5.3.3 定义优化器与损失函数 102
5.3.4 保存和加载网络 103
5.4 小实战:用PyTorch搭建一个神经网络以学习异或运算 104
5.4.1 需求分析 104
5.4.2 训练程序 105
5.4.3 测试程序 107
5.5 小结 109
第6章 Python搭建神经网络进阶 110
6.1 NumPy简介 111
6.1.1 NumPy的基本功能 111
6.1.2 NumPy的数据类型 111
6.2 NumPy的使用 112
6.2.1 安装NumPy 112
6.2.2 创建数组 112
6.2.3 存储和读取数组 114
6.2.4 索引和切片 115
6.2.5 重塑数组 116
6.2.6 数组的运算 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 创建文件夹 129
6.5.5 文件遍历 130
6.6 构建和读取数据集 132
6.6.1 构建数据集 132
6.6.2 读取数据集 135
6.7 PyTorch中卷积神经网络有关的接口 136
6.7.1 卷积层接口 136
6.7.2 反卷积层接口 137
6.8 小结 137
第7章 实战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 动态绘图 148
7.2 回归问题 149
7.3 用Python搭建一个解决回归问题的神经网络 151
7.3.1 准备工作 151
7.3.2 构建网络 152
7.3.3 训练网络 153
7.3.4 完整程序 154
7.4 分类问题 155
7.5 用Python搭建一个解决分类问题的神经网络 156
7.5.1 准备工作 156
7.5.2 构建网络 159
7.5.3 训练网络 160
7.5.4 可视化 161
7.5.5 完整程序 162
7.6 小结 164
第8章 实战2:猫狗识别问题 165
8.1 实战目标 166
8.1.1 目标分析 166
8.1.2 样本集 167
8.2 实现思路 167
8.2.1 构建样本集 168
8.2.2 测试样本集 169
8.2.3 构建网络 170
8.2.4 训练网络 171
8.2.5 测试网络 172
8.3 完整程序及运行结果 172
8.3.1 构建样本集程序 172
8.3.2 测试样本集程序 174
8.3.3 构建网络程序 175
8.3.4 训练网络程序 177
8.3.5 可视化训练过程 179
8.3.6 测试网络程序 180
8.3.7 模拟实际运用 181
8.4 对结果的思考 182
8.4.1 训练集和测试集准确率的对比 182
8.4.2 准确率低的原因 183
8.4.3 训练过程的启示 184
8.5 小结 184
第9章 一些经典的网络 185
9.1 LeNet-5网络模型 186
9.1.1 LeNet-5网络简介 186
9.1.2 LeNet-5网络结构 186
9.1.3 三维卷积 188
9.1.4 多维卷积 190
9.1.5 LeNet-5代码实现 191
9.2 AlexNet网络模型 192
9.2.1 AlexNet网络简介 193
9.2.2 AlexNet网络结构 193
9.2.3 Same卷积 194
9.2.4 Softmax分类器 196
9.2.5 AlexNet代码实现 197
9.3 VGG16网络模型 198
9.3.1 VGG16网络简介 198
9.3.2 VGG16网络结构 198
9.4 小结 200
第10章 实战3:验证码识别问题 201
第11章 优化网络 220