从零开始构建深度前馈神经网络(Python+TensorFlow 2.x)
定 价:69.8 元
丛书名:人工智能与大数据技术大讲堂
- 作者:张光华
- 出版时间:2021/12/1
- ISBN:9787111696155
- 出 版 社:机械工业出版社
- 中图法分类:TP18
- 页码:
- 纸张:胶版纸
- 版次:
- 开本:16开
2016年,一只阿法狗(AlphaGo)为全世界打开了一条窄窄的门缝,通往未来之路就此展现。
通过超强硬件和大量的数据积累,人工智能浪潮第三次兴起。借助人工智能技术,公安部门可以轻松抓捕潜逃多年的罪犯,“AI换脸”已经成为普通用户的娱乐方式之一,智慧城市、自动驾驶开始在多个城市有试点……
GPT-3、Switch Transformer开启了新的时代,而智源研究院的悟道2.0参量则高达1.75万亿。训练有素的结构生物学家花费上千万美元历时多年的研究结果,AlphaFold v2.0在朝夕之间便完成预测。
今天,主动拥抱新变化,积极学习新知识,愈发显得重要。很多人积极投入热情、时间和金钱后,没能坚持多久就中断了学习。也有很多同学对此表示观望甚至放弃,觉得凭自己的基础不足以把握这次机会。
诚然,仅凭一本书很难帮助普通读者深刻理解并熟练掌握深度学习中的全部知识,因此“AI精研社”规划了一个系列图书,给出完整的解决方案,希望能帮助读者循序渐进、平滑而高效地成长为合格的人工智能算法实践者(practitioners)。
本书是“人工智能与大数据技术大讲堂”系列图书的第2部。本书从体验手写数字(k近邻算法)识别开始,循序渐进地不断加深读者对神经网络模型的理解,进而可以设计并实现自己的模型。另外,本书通过Python+NumPy从零开始构建神经网络模型,强化读者对算法思想的理解,并通过TensorFlow构建模型来验证读者亲手从零构建的版本。
前馈神经网络是深度学习的重要知识,其核心思想是反向传播与梯度下降。本书从极易理解的示例开始,逐渐深入,帮助读者充分理解并熟练掌握反向传播与梯度下降算法,为后续学习打下坚实的基础。
本书延续理论与实践并重的风格,先以图文方式讲解算法思想,再以Python+NumPy实现算法,然后再给出TensorFlow实现的版本,帮助读者不断加深对核心的算法理解,同时提升实际动手能力,从而锻炼将算法思想转化为程序代码的能力。
图书+视频+GitHub/Gitee+微信公众号+学习管理平台+群+专业助教立体化学习解决方案
让数学公式生动易懂,让算法描述简洁、清晰
让公式与代码一一对应,让理论与实践相互促进
将算法转换为程序,徒手搭建与TensorFlow搭建精准匹配
前沿:采用Python+TensorFlow 2.6.0编写,帮助读者快速掌握前沿的深度学习框架。
透彻:先以通俗易懂的文字讲解神经网络的核心算法思想,再以纯Python代码加深读者对算法思想的理解,通过文字、数学表达和代码三者对应的方式帮助读者理解。
原创:通过大量的原创示例,对核心知识点进行多角度详解,帮助读者透彻理解。
完整:构建完整的学习资源,并通过全路径学习计划以及线上和线下互动,形成完整的立体化学习解决方案。
平滑:对理解和构建前馈神经网络所需要的核心知识点进行精心设计,使得整个学习过程平滑而高效。
实践:先以纯Python代码实现算法,再给出TensorFlow实现,理论与实践并重,帮助读者提高实际动手能力。
为什么要写这本书
学习本应该是一件轻松快乐的事,因为探索与解释是人类的天性。
专业学习通常是投入产出比极高的一件事,尤其是在当代社会,真才实干者通常可以从社会获得合理而丰厚的回报。因此,笔者希望能帮助初学者更高效地入门专业领域,在尽量精简安排知识点的同时,避免晦涩难懂的语言打击初学者的积极性。
笔者希望建立初学者关怀的意识,设身处地地为初学者考虑,为初学者量身定制并优化知识体系,而不是简单地搬运官方文档。
本书尝试介绍一个新的学习主张,以帮助初学者轻松、高效地入门人工智能这一专业领域。
本书特色
* 前沿:书中的示例代码基于新发布的(截至2021年9月1日)TensorFlow稳定版本即2.6.0编写,以帮助读者快速掌握前沿的深度学习框架。
* 透彻:全面贯彻Learning by doing与Understanding by creating的学习理念,先以通俗易懂的文字讲解核心算法思想,再以纯Python代码加深读者对算法思想的理解,通过文字描述、数学表达和代码实现三者对应的方式帮助读者理解核心算法思想的重要细节。
* 原创:通过大量原创示例,对基础且重要的核心知识点进行多角度的详细讲解,帮助读者透彻理解精要知识点,从而建立学习信心,为后续学习打下坚实的基础。
* 完整:通过“图书+视频+GitHub/gitee+微信公众号+学习管理平台+群+专业助教”的方式,构建完整的学习资源,并通过全路径学习计划与线上线下互动,形成完整的学习解决方案。
* 平滑:专业知识学习的过程理应是循序渐进的。本书的第3章在强化第2章知识点的同时平滑地引入新的知识点,第4章在强化第2章和第3章知识点的同时再引入新的概念,以此类推。本书对理解并构建前馈神经网络所需要的核心知识点进行精心设计,使得整个学习过程平滑而高效。
* 实践:帮助读者逐步加深对算法思想理解的同时,通过代码实现算法思想,将理论转化为可以运行的程序。本书先以纯Python代码实现算法,再给出TensorFlow的实现版本,理论与实践并重,从而帮助读者提高实际动手能力。
本书内容
本书共9章,下面简要介绍各章内容。
第1章介绍如何搭建学习和开发环境。
第2章带领读者体验k近邻算法,帮助他们掌握机器学习的一些基本概念。
第3章循序渐进地介绍模型的学习、训练及其他重要的基础概念与算法思想,并以感知机为例,详细讲解模型参数。
第4章在第3章的基础上引入深度学习中的重要思想方法之一——概率化解释。
第5章在读者充分理解单层神经网络算法思想的基础上,使用TensorFlow实现对数几率回归模型,进一步加深读者对神经网络算法思想的理解,同时帮助他们初步掌握TensorFlow的相关API。
第6章详细讲解数据预处理和小批量等行之有效的深度学习实践。
第7章在归纳总结第3~6章相关内容的基础上,引入计算图这一重要工具,并通过TensorBoard查看TensorFlow的计算图实现。
第8章介绍如何将单层神经网络平滑地扩展为两层神经网络。
第9章在第8章的基础上进一步介绍如何将两层神经网络扩展为L层神经网络。
附录对神经网络算法涉及的线性代数的相关知识进行简单的介绍,并提供相应的示例代码。
读者对象
本书假定读者具备一定的Python编程基础与数学基础,主要适合以下人员阅读:
* 对人工智能和机器学习感兴趣的人员;
* 对深度学习和计算机视觉感兴趣的人员;
* 对大数据分析、数据挖掘和数据科学感兴趣的人员;
* 讲授人工智能、机器学习、深度学习、大数据分析、数据挖掘和数据科学的老师;
* 希望提升自己未来竞争力的人员。
本书对知识结构进行科学和专业的设计,即使部分读者未能熟练掌握高等数学的相关基础知识,也只影响部分章节的阅读,而并不会影响他们对算法思想的理解与代码的实现。
若读者对Python编程尚不熟悉,可以参考“人工智能与大数据技术大讲堂”丛书的第1部《人工智能极简编程入门(基于Python)》,或访问微信公众号“AI精研社”获得帮助。
如何使用本书
本书既可作为各院校课堂教学的教材,也可作为读者自学使用的参考书。本书对章节顺序与知识点的依赖关系进行了精心设计,若读者作为自学用书,除第1章外,其他各章请按顺序进行阅读。
描述算法通常有以下三种方式:
* 自然语言:是日常生活交流中使用的语言,易于理解,可以帮助读者对算法思想建立初步的理解,但常常无法精准且简练地描述算法。
* 数学表达:使用预先约定的一系列记号描述算法,既精准又简练,在自然语言的辅助下,可以帮助读者进一步理解并掌握算法思想。
* 代码实现:将算法思想转换为可以运行并输出预期结果的程序代码,可以帮助读者深刻理解并熟练掌握算法思想及其重要的细节。
从第3章起,建议读者阅读完每小节的内容后立即亲自动手进行大量练习,直至只参考书中的自然语言或数学表达便可自己写出实现算法思想的代码,然后再进入下一小节内容的学习。
配套资源获取
本书涉及的配套资源如下:
* 实例源代码;
* 配套教学视频;
* 人工智能专业词汇中英文对照表;
* 本书引用源列表。
读者可以通过以下两种途径获取本书配套资源:
* 关注微信公众号“AI精研社”,然后发送“DL101”至该公众号进行获取。
* 在华章公司的网站(www.hzbook.com)上搜索到本书,然后单击“资料下载”按钮,即可在本书页面的右上方找到相关链接进行获取。
教学服务
本书非常适合作为高等院校人工智能专业的教材。为此,售后团队“AI精研社”专门为相关授课老师提供以下教学支持:
* 赠送教学PPT;
* 提供有偿的师资培训。
如果需要进一步了解详情,请关注“AI精研社”微信公众号进行咨询,也可以给本书编辑发送电子邮件(627173439@qq.com)进行了解。
售后服务与勘误
“AI精研社”为本书提供专业的售后服务。读者可以用手机扫描下面的二维码关注“AI精研社”微信公众号。
“AI精研社”微信公众号二维码
虽然笔者为本书的写作投入了大量的时间,并对书中的示例代码进行了反复测试、迭代和改进,但恐怕依然无法避免少量的错误与不当。
若读者发现本书有错误或不当之处,请联系“AI精研社”进行反馈,笔者会及时更改并将勘误表发布到GitHub、Gitee和“AI精研社”微信公众号中。另外,读者也可以给本书编辑发送电子邮件(地址见“教学服务”模块)进行反馈。
致谢
策划和写作本书的过程中,笔者得到了很多前辈和行业专家的指导、支持与帮助,笔者的家人与诸多好友也为此投入了大量的时间与精力,在此向他们表达诚挚的谢意!
还要特别感谢贾庸及其家人(小坏、坏妈)的支持与帮助!贾庸以其丰富的技术管理经验保障了本书及其相关支持系统的进度与质量。
还要特别感谢欧振旭编辑!他为本书的策划与运营推广提供了不可或缺的指导与帮助。
还要感谢本书的支持团队和策划团队,以及技术、内容和教学服务团队!
还有很多幕后小伙伴和热心网友也为本书提出了极有价值的反馈,在此一并表示感谢!
张光华
张光华 博士毕业于重庆大学,硕士毕业于中国科学技术大学。山西省“1331工程”大数据智能诊疗产业学院负责人,山西省工信厅“山西省健康大数据AI联合实验室”负责人。中国医药教育协会智能医学专委会委员,中国医药教育协会智能眼科学组常委。主要研究方向为量子点微型多光谱成像技术、医学图像处理和机器学习。现已发表包括医学、图像处理和机器学习等领域的SCI期刊及国际会议论文多篇,参与多项中国和欧洲科学基金项目。致力于将深度学习技术与临床医学进行深度融合,并推广和落地。
前言
第1章 环境搭建1
1.1 下载并安装Python1
1.2 Python软件环境管理工具Anaconda2
1.2.1 下载Anaconda2
1.2.2 安装Anaconda4
1.2.3 验证Anaconda的安装6
1.3 通过TUNA加速Anaconda8
1.3.1 清华大学开源软件镜像站TUNA8
1.3.2 在Windows中设置Anaconda镜像通道10
1.3.3 在类UNIX中设置Anaconda镜像通道11
1.4 使用Jupyter Notebook12
1.4.1 通过“开始”菜单启动Jupyter Notebook12
1.4.2 通过命令行启动Jupyter Notebook13
1.4.3 新建并重命名Notebook14
1.4.4 安装Jupyter Notebook插件16
1.5 安装TensorFlow 2.617
1.5.1 通过Notebook cell安装TensorFlow 2.617
1.5.2 通过pip install命令离线安装TensorFlow18
1.6 小结与补充说明20
第2章 使用k近邻算法识别手写数字图像22
2.1 手写数字图像数据集MNIST22
2.1.1 使用TensorFlow加载MNIST23
2.1.2 使用scikit-learn加载MNIST24
2.2 分类器与准确率25
2.3 k近邻算法的基本思想26
2.4 利用k-NN识别MNIST27
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 鸢尾花数据集iris37
3.2.1 样本特征37
3.2.2 样本分类38
3.2.3 构造简化版iris数据集39
3.3 感知机分类精简版iris42
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 使用自动求梯度实现LR97
5.3.1 更新TensorFlow变量97
5.3.2 实现LogisticRegressionV2类98
5.3.3 使用LogisticRegressionV2分类精简版iris101
5.3.4 极简体验模型调参102
5.4 使用Sequential实现LR102
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分类简化版MNIST116
6.2.1 数据预处理之归一化116
6.2.2 数据预处理之扁平化117
6.2.3 LR分类简化版MNIST119
6.2.4 修复LogisticRegression类121
6.2.5 测试修复123
6.3 小批量梯度下降124
6.3.1 向量化编程124
6.3.2 构造小批量样本125
6.3.3 计算LR损失函数关于线性模型的导数dz126
6.3.4 计算LR损失函数关于权值向量的导数dw128
6.3.5 计算LR损失函数关于偏置量的导数db130
6.3.6 小批量模型训练133
6.3.7 小批量LR分类简化版MNIST134
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分类简化版MNIST155
7.2.4 重构LogisticRegression类156
7.2.5 测试重构版LogisticRegression类157
7.3 使用TensorFlow定义并训练模型158
7.4 体验TensorBoard161
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
后记222