前言
TensorFlow是目前使用最广泛的机器学习框架,满足了广大用户的需求。如今TensorFlow已经更新到2.0版本,具有更强的易用性。
本书通过大量的实例讲解在TensorFlow框架上实现人工智能的技术,兼容TensorFlow 1.0与TensorFlow 2.0版本,覆盖多种开发场景。
书中的内容主要源于作者在代码医生工作室的工作积累。作者将自己在真实项目中使用TensorFlow的经验与技巧全部写进书里,让读者可以接触到最真实的案例,最实战的场景,尽快搭上人工智能的“列车”。
作者将自身的项目实战经验浓缩到三本书里,形成了“深度学习三部曲”。三本书形成一套完善的知识体系,构成了完备的技术栈闭环。
本书是“深度学习三部曲”的最后一本。
-《Python带我起飞:入门、进阶、商业实战》,主要讲解了Python基础语法。与深度学习关系不大,但包含了开发神经网络模型所必备的基础知识。
-《深度学习之TensorFlow:入门、原理与进阶实战》,主要讲解了深度学习的基础网络模型及TensorFlow框架的基础编程方法。
-《深度学习之TensorFlow工程化项目实战》,主要讲解在实战项目中用到的真实模型,以及将TensorFlow框架用于各种生产环境应用场景的编程方法。
这三本书可以将一个零基础的读者顺利带入深度学习行业,并让其能够成为一名合格的深度学习工程师。
----------------------------------
本书特色
1. 兼容TensorFlow 1.x与TensorFlow 2.0版本,提供了大量的编程经验
本书兼顾TensorFlow 1.x与TensorFlow 2.0两个版本,给出了如何将TensorFlow 1.x代码升级为TensorFlow 2.0可用的代码。
2. 覆盖了TensorFlow的大量接口
TensorFlow是一个非常庞大的框架,内部有很多接口可以满足不同用户的需求。合理使用现有接口可以在开发过程中起到事半功倍的效果。然而,由于TensorFlow的代码迭代速度太快,有些接口的配套文档并不是很全。作者花了大量的时间与精力,对一些实用接口的使用方法进行摸索与整理,并将这些方法写到书中。
3. 提供了高度可重用代码,公开了大量的商用代码片段
本书实例中的代码大多都来自代码医生工作室的商业项目,这些代码的易用性、稳定性、可重用性都很强。读者可以将这些代码提取出来直接用在自己的项目中,加快开发进度。
4. 书中的实战案例可应用于真实场景
本书中大部分实例都是当前应用非常广泛的通用任务,包括图片分类、目标识别、像素分割、文本分类、语音合成等多个方向。读者可以在书中介绍的模型的基础上,利用自己的业务数据集快速实现AI功能。
5. 从工程角度出发,覆盖工程开发全场景
本书以工程实现为目标,全面覆盖开发工程化AI项目中所涉及的知识,并全部配有实例,包括开发数据集、训练模型、特征工程、开发模型、保护模型文件、模型防御、服务端和终端的模型部署。其中,特征工程部分全面讲解了TensorFlow中的特征列接口。该接口可以使数据在特征处理阶段就以图的方式进行加工,从而保证了在训练场景下和使用场景下模型的输入统一。
6. 提供了大量前沿论文链接地址,便于读者进一步深入学习
本书使用的AI模型,大多来源于前沿的技术论文,并在原有论文基础上做了一些结构改进。这些实例具有很高的科研价值。读者可以根据书中提供的论文链接地址,进一步深入学习更多的前沿知识,再配合本书的实例进行充分理解,达到融会贯通。本书也可以帮助AI研究者进行学术研究。
7. 注重方法与经验的传递
本书在讲解知识时,更注重传授方法与经验。全书共有几十个“提示”标签,其中的内容都是含金量很高的成功经验分享与易错事项总结,有关于经验技巧的,也有关于风险规避的,可以帮助读者在学习的路途上披荆斩棘,快速进步。
----------------------------------
本书读者对象
-人工智能爱好者
-人工智能开发工程师
-人工智能专业的高校学生 ?
-使用TensorFlow框架的工程师
-人工智能专业的教师 ?
-集成人工智能的开发人员
-人工智能初学者
作者简介
李金洪
“大蛇智能”网站创始人、“代码医生”工作室主程序员。
精通Python、C、C++、汇编、Java和Go等多种编程语言。擅长神经网络、算法、协议分析、逆向工程和移动互联网安全架构等技术。在深度学习领域,参与过某移动互联网后台的OCR项目、某娱乐节目机器人的语音识别和声纹识别项目,以及人脸识别、活体检测等多个项目。在“代码医生”工作室工作期间,完成过金融、安全、市政和医疗等多个领域的AI算法外包项目。
出版过《Python带我起——入门、进阶、商业实战》《深度学习之TensorFlow——入门、原理与进阶实战》两本书。
目录
=====第1篇 准备
第1章 学习准备/2
1.1 TensorFlow能做什么/2
1.2 学习TensorFlow的必备知识/3
1.3 学习技巧:跟读代码/4
1.4 如何学习本书/4
-
第2章 搭建开发环境/5
2.1 准备硬件环境/5
2.2 下载及安装Anaconda/6
2.3 安装TensorFlow/9
2.4 GPU版本的安装方法/10
2.4.1 在Windows中安装CUDA/10
2.4.2 在Linux中安装CUDA/13
2.4.3 在Windows中安装cuDNN/13
2.4.4 在Linux中安装cuDNN/14
2.4.5 常见错误及解决方案/16
2.5 测试显卡的常用命令/16
2.6 TensorFlow 1.x版本与2.x版本共存的解决方案/18
-
第3章 实例1:用AI模型识别图像是桌子、猫、狗,还是其他/21
3.1 准备代码环境并预训练模型/21
3.2 代码实现:初始化环境变量,并载入ImgNet标签/24
3.3 代码实现:定义网络结构/25
3.4 代码实现:载入模型进行识别/26
3.5 扩展:用更多预训练模型完成图片分类任务/28
===== 第2篇 基础
第4章 用TensorFlow制作自己的数据集/30
4.1 快速导读/30
4.1.1 什么是数据集/30
4.1.2 TensorFlow的框架/31
4.1.3 什么是TFDS/31
4.2 实例2:将模拟数据制作成内存对象数据集/32
4.2.1 代码实现:生成模拟数据/32
4.2.2 代码实现:定义占位符/33
4.2.3 代码实现:建立会话,并获取显数据/34
4.2.4 代码实现:模拟数据可视化/34
4.2.5 运行程序/34
4.2.6 代码实现:创建带有迭代值并支持乱序功能的模拟数据集/35
4.3 实例3:将图片制作成内存对象数据集/37
4.3.1 样本介绍/38
4.3.2 代码实现:载入文件名称与标签/39
4.3.3 代码实现:生成队列中的批次样本数据/40
4.3.4 代码实现:在会话中使用数据集/41
4.3.5 运行程序/42
4.4 实例4:将Excel文件制作成内存对象数据集/42
4.4.1 样本介绍/43
4.4.2 代码实现:逐行读取数据并分离标签/43
4.4.3 代码实现:生成队列中的批次样本数据/44
4.4.4 代码实现:在会话中使用数据集/45
4.4.5 运行程序/46
4.5 实例5:将图片文件制作成TFRecord数据集/46
4.5.1 样本介绍/47
4.5.2 代码实现:读取样本文件的目录及标签/47
4.5.3 代码实现:定义函数生成TFRecord数据集/48
4.5.4 代码实现:读取TFRecord数据集,并将其转化为队列/49
4.5.5 代码实现:建立会话,将数据保存到文件/50
4.5.6 运行程序/51
4.6 实例6:将内存对象制作成Dataset数据集/52
4.6.1 如何生成Dataset数据集/52
4.6.2 如何使用Dataset接口/53
4.6.3 tf.data.Dataset接口所支持的数据集变换操作/54
4.6.4 代码实现:以元组和字典的方式生成Dataset对象/58
4.6.5 代码实现:对Dataset对象中的样本进行变换操作/59
4.6.6 代码实现:创建Dataset迭代器/60
4.6.7 代码实现:在会话中取出数据/60
4.6.8 运行程序/61
4.6.9 使用tf.data.Dataset.from_tensor_slices接口的注意事项/62
4.7 实例7:将图片文件制作成Dataset数据集/63
4.7.1 代码实现:读取样本文件的目录及标签/64
4.7.2 代码实现:定义函数,实现图片转换操作/64
4.7.3 代码实现:用自定义函数实现图片归一化/65
4.7.4 代码实现:用第三方函数将图片旋转30°/65
4.7.5 代码实现:定义函数,生成Dataset对象/66
4.7.6 代码实现:建立会话,输出数据/67
4.7.7 运行程序/68
4.8 实例8:将TFRecord文件制作成Dataset数据集/69
4.8.1 样本介绍/69
4.8.2 代码实现:定义函数,生成Dataset对象/70
4.8.3 代码实现:建立会话输出数据/71
4.8.4 运行程序/72
4.9 实例9:在动态图中读取Dataset数据集/72
4.9.1 代码实现:添加动态图调用/72
4.9.2 制作数据集/73
4.9.3 代码实现:在动态图中显示数据/73
4.9.4 扩展示例10:在TensorFlow 2.x中操作数据集/74
4.10 实例11:在不同场景中使用数据集/77
4.10.1 代码实现:在训练场景中使用数据集/78
4.10.2 代码实现:在应用模型场景中使用数据集/79
4.10.3 代码实现:在训练与测试混合场景中使用数据集/80
4.11 tf.data.Dataset接口的更多应用/81
-
第5章 10分钟快速训练自己的图片分类模型/82
5.1 快速导读/82
5.1.1 认识模型和模型检查点文件/82
5.1.2 了解“预训练模型”与微调(Fine-Tune)/82
5.1.3 学习TensorFlow中的预训练模型库――TF-Hub库/83
5.2 实例12:通过微调模型分辨男女/83
5.2.1 准备工作/84
5.2.2 代码实现:处理样本数据并生成Dataset对象/85
5.2.3 代码实现:定义微调模型的类MyNASNetModel/88
5.2.4 代码实现:构建MyNASNetModel类中的基本模型/88
5.2.5 代码实现:实现MyNASNetModel类中的微调操作/89
5.2.6 代码实现:实现与训练相关的其他方法/90
5.2.7 代码实现:构建模型,用于训练、测试、使用/92
5.2.8 代码实现:通过二次迭代来训练微调模型/94
5.2.9 代码实现:测试模型/96
5.3 扩展:通过摄像头实时分辨男女/100
5.4 TF-slim接口中的更多成熟模型/100
5.5 实例13:用TF-Hub库微调模型以评估人物的年龄/100
5.5.1 准备样本/101
5.5.2 下载TF-Hub库中的模型/102
5.5.3 代码实现:测试TF-Hub库中的MobileNet_V2模型/104
5.5.4 用TF-Hub库微调MobileNet_V2模型/107
5.5.5 代码实现:用模型评估人物的年龄/109
5.5.6 扩展:用TF-Hub库中的其他模型实现不同领域的分类任务/113
5.6 总结/113
5.7 练习题/114
5.7.1 基于TF-slim接口的练习/115
5.7.2 基于TF-Hub库的练习/115
-
第6章 用TensorFlow编写训练模型的程序/117
6.1 快速导读/117
6.1.1 训练模型是怎么一回事/117
6.1.2 用“静态图”方式训练模型/117
6.1.3 用“动态图”方式训练模型/118
6.1.4 什么是估算器框架接口(Estimators API)/119
6.1.5 什么是tf.layers接口/120
6.1.6 什么是tf.keras接口/121
6.1.7 什么是tf.js接口/122
6.1.8 什么是TFLearn框架/123
6.1.9 该选择哪种框架/123
6.1.10 分配运算资源与使用分布策略/124
6.1.11 用tfdbg调试TensorFlow模型/127
6.1.12 用钩子函数(Training_Hooks)跟踪训练状态/127
6.1.13 用分布式运行方式训练模型/128
6.1.14 用T2T框架系统更方便地训练模型/128
6.1.15 将TensorFlow 1.x中的代码移植到2.x版本/129
6.1.16 TensorFlow 2.x中的新特性――自动图/130
6.2 实例14:用静态图训练一个具有保存检查点功能的回归模型/131
6.2.1 准备开发步骤/131
6.2.2 生成检查点文件/131
6.2.3 载入检查点文件/132
6.2.4 代码实现:在线性回归模型中加入保存检查点功能/132
6.2.5 修改迭代次数,二次训练/135
6.3 实例15:用动态图(eager)训练一个具有保存检查点功能的回归模型/136
6.3.1 代码实现:启动动态图,生成模拟数据/136
6.3.2 代码实现:定义动态图的网络结构/137
6.3.3 代码实现:在动态图中加入保存检查点功能/138
6.3.4 代码实现:按指定迭代次数进行训练,并可视化结果/139
6.3.5 运行程序,显示结果/140
6.3.6 代码实现:用另一种方法计算动态图梯度/141
6.3.7 扩展实例16:在动态图中获取参数变量/142
6.3.8 小心动态图中的参数陷阱/144
6.3.9 扩展实例17:在静态图中使用动态图/145
6.4 实例18:用估算器框架训练一个回归模型/147
6.4.1 代码实现:生成样本数据集/147
6.4.2 代码实现:设置日志级别/148
6.4.3 代码实现:实现估算器的输入函数/148
6.4.4 代码实现:定义估算器的模型函数/149
6.4.5 代码实现:通过创建config文件指定硬件的运算资源/151
6.4.6 代码实现:定义估算器/152
6.4.7 用tf.estimator.RunConfig控制更多的训练细节/153
6.4.8 代码实现:用估算器训练模型/153
6.4.9 代码实现:通过热启动实现模型微调/155
6.4.10 代码实现:测试估算器模型/158
6.4.11 代码实现:使用估算器模型/158
6.4.12 扩展实例19:为估算器添加日志钩子函数/159
6.5 实例20:将估算器代码改写成静态图代码/161
6.5.1 代码实现:复制网络结构/161
6.5.2 代码实现:重用输入函数/163
6.5.3 代码实现:创建会话恢复模型/163
6.5.4 代码实现:继续训练/163
6.6 实例21:用tf.layers API在动态图上识别手写数字/165
6.6.1 代码实现:启动动态图并加载手写图片数据集/165
6.6.2 代码实现:定义模型的类/166
6.6.3 代码实现:定义网络的反向传播/167
6.6.4 代码实现:训练模型/167
6.7 实例22:用tf.keras API训练一个回归模型/168
6.7.1 代码实现:用model类搭建模型/168
6.7.2 代码实现:用sequential类搭建模型/169
6.7.3 代码实现:搭建反向传播的模型/171
6.7.4 代码实现:用两种方法训练模型/172
6.7.5 代码实现:获取模型参数/172
6.7.6 代码实现:测试模型与用模型进行预测/173
6.7.7 代码实现:保存模型与加载模型/173
6.7.8 代码实现:将模型导出成JSON文件,再将JSON文件导入模型/175
6.7.9 扩展实例23:在tf.keras接口中使用预训练模型ResNet/176
6.7.10 扩展:在动态图中使用tf.keras接口/178
6.7.11 扩展实例24:在静态图中使用tf.keras接口/178
6.8 实例25:用tf.js接口后方训练一个回归模型/180
6.8.1 代码实现:在HTTP的头标签中添加tfjs模块/180
6.8.2 代码实现:用JavaScript脚本实现回归模型/181
6.8.3 运行程序:在浏览器中查看效果/181
6.8.4 扩展:tf.js 接口的应用场景/182
6.9 实例26:用估算器框架实现分布式部署训练/182
6.9.1 运行程序:修改估算器模型,使其支持分布式/182
6.9.2 通过TF_CONFIG进行分布式配置/183
6.9.3 运行程序/185
6.9.4 扩展:用分布策略或KubeFlow框架进行分布式部署/186
6.10 实例27:在分布式估算器框架中用tf.keras接口训练ResNet模型,识别图片中是橘子还是苹果/186
6.10.1 样本准备/186
6.10.2 代码实现:准备训练与测试数据集/187
6.10.3 代码实现:制作模型输入函数/187
6.10.4 代码实现:搭建ResNet模型/188
6.10.5 代码实现:训练分类器模型/189
6.10.6 运行程序:评估模型/190
6.10.7 扩展:全连接网络的优化/190
6.11 实例28:在T2T框架中用tf.layers接口实现MNIST数据集分类/191
6.11.1 代码实现:查看T2T框架中的数据集(problems)/191
6.11.2 代码实现:构建T2T框架的工作路径及下载数据集/192
6.11.3 代码实现:在T2T框架中搭建自定义卷积网络模型/193
6.11.4 代码实现:用动态图方式训练自定义模型/194
6.11.5 代码实现:在动态图中用metrics模块评估模型/195
6.12 实例29:在T2T框架中,用自定义数据集训练中英文翻译模型/196
6.12.1 代码实现:声明自己的problems数据集/196
6.12.2 代码实现:定义自己的problems数据集/197
6.12.3 在命令行下生成tfrecoder格式的数据/198
6.12.4 查找T2T框架中的模型及超参,并用指定的模型及超参进行训练/199
6.12.5 用训练好的T2T框架模型进行预测/201
6.12.6 扩展:在T2T框架中,如何选取合适的模型及超参/202
6.13 实例30:将TensorFlow 1.x中的代码升级为可用于2.x版本的代码/203
6.13.1 准备工作:创建Python虚环境/203
6.13.2 使用工具转换源码/204
6.13.3 修改转换后的代码文件/204
6.13.4 将代码升级到TensorFlow 2.x版本的经验总结/205
第3篇 进阶
-第7章 特征工程――会说话的数据/208
7.1 快速导读/208
7.1.1 特征工程的基础知识/208
7.1.2 离散数据特征与连续数据特征/209
7.1.3 了解特征列接口/210
7.1.4 了解序列特征列接口/210
7.1.5 了解弱学习器接口――梯度提升树(TFBT接口)/210
7.1.6 了解特征预处理模块(tf.Transform)/211
7.1.7 了解因子分解模块/212
7.1.8 了解加权矩阵分解算法/212
7.1.9 了解Lattice模块――点阵模型/213
7.1.10 联合训练与集成学习/214
7.2 实例31:用wide_deep模型预测人口收入/214<
以下为对购买帮助不大的评价