首页生活百科详情

深度学习之TensorFlow工程化项目实战

来源网络2023-01-09 18:57:03 62
深度学习之TensorFlow工程化项目实战

深度学习之TensorFlow工程化项目实战

《深度学习之TensorFlow工程化项目实战》,作者:李金洪,2019年5月电子工业出版社出版,本书兼容TensorFlow 1.x与2.x版本,用大量实例,学习可套用于真实场景的AI项目。

基本介绍

  • 书名:深度学习之TensorFlow工程化项目实战
  • 作者:李金洪 
  • ISBN:978-7-121-36392-4
  • 页数:768
  • 定价:159
  • 出版社:电子工业出版社
  • 出版时间:2019-05
  • 装帧:平装
  • 开本:16

内容提要

《深度学习之TensorFlow工程化项目实战》是一本非常全面的、专注于实战的AI图书,兼容TensorFlow 1.x和2.x版本,共75个实例。
《深度学习之TensorFlow工程化项目实战》共分为5篇:第1篇,介绍了学习準备、搭建开发环境、使用AI模型来识别图像;第2篇,介绍了用TensorFlow开发实际工程的一些基础操作,包括使用TensorFlow製作自己的数据集、快速训练自己的图片分类模型、编写训练模型的程式;第3篇,介绍了机器学习算法相关内容,包括特徵工程、卷积神经网路(CNN)、循环神经网路(RNN);第4篇,介绍了多模型的组合训练技术,包括生成式模型、模型的攻与防;第5篇,介绍了深度学习在工程上的套用,侧重于提升读者的工程能力,包括TensorFlow模型製作、布署TensorFlow模型、商业实例。
本书结构清晰、案例丰富、通俗易懂、实用性强。适合对人工智慧、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
7.2.1 了解人口收入数据集 214
7.2.2 代码实现:探索性数据分析 217
7.2.3 认识wide_deep模型 218
7.2.4 部署代码档案 219
7.2.5 代码实现:初始化样本常量 220
7.2.6 代码实现:生成特徵列 220
7.2.7 代码实现:生成估算器模型 222
7.2.8 代码实现:定义输入函式 223
7.2.9 代码实现:定义用于导出冻结图档案的函式 224
7.2.10 代码实现:定义类,解析启动参数 225
7.2.11 代码实现:训练和测试模型 226
7.2.12 代码实现:使用模型 227
7.2.13 运行程式 228
7.3 实例32:用弱学习器中的梯度提升树算法预测人口收入 229
7.3.1 代码实现:为梯度提升树模型準备特徵列 230
7.3.2 代码实现:构建梯度提升树模型 230
7.3.3 代码实现:训练并导出梯度提升树模型 231
7.3.4 代码实现:设定启动参数,运行程式 232
7.3.5 扩展:更灵活的TFBT接口 233
7.4 实例33:用feature_column模组转换特徵列 233
7.4.1 代码实现:用feature_column模组处理连续值特徵列 234
7.4.2 代码实现:将连续值特徵列转化成离散值特徵列 237
7.4.3 代码实现:将离散文本特徵列转化为one-hot与词向量 239
7.4.4 代码实现:根据特徵列生成交叉列 246
7.5 实例34:用sequence_feature_column接口完成自然语言处理任务的数据预处理工作 248
7.5.1 代码实现:构建模拟数据 248
7.5.2 代码实现:构建词嵌入初始值 249
7.5.3 代码实现:构建词嵌入特徵列与共享特徵列 249
7.5.4 代码实现:构建序列特徵列的输入层 250
7.5.5 代码实现:建立会话输出结果 251
7.6 实例35:用factorization模组的kmeans接口聚类COCO数据集中的标注框 253
7.6.1 代码实现:设定要使用的数据集 253
7.6.2 代码实现:準备带聚类的数据样本 253
7.6.3 代码实现:定义聚类模型 255
7.6.4 代码实现:训练模型 256
7.6.5 代码实现:输出图示化结果 256
7.6.6 代码实现:提取并排序聚类结果 258
7.6.7 扩展:聚类与神经网路混合训练 258
7.7 实例36:用加权矩阵分解模型实现基于电影评分的推荐系统 259
7.7.1 下载并载入数据集 259
7.7.2 代码实现:根据用户和电影特徵列生成稀疏矩阵 260
7.7.3 代码实现:建立WALS模型,并对其进行训练 261
7.7.4 代码实现:评估WALS模型 263
7.7.5 代码实现:用WALS模型为用户推荐电影 264
7.7.6 扩展:使用WALS的估算器接口 265
7.8 实例37:用Lattice模组预测人口收入 265
7.8.1 代码实现:读取样本,并创建输入函式 266
7.8.2 代码实现:创建特徵列,并保存校準关键点 267
7.8.3 代码实现:创建校準线性模型 270
7.8.4 代码实现:创建校準点阵模型 270
7.8.5 代码实现:创建随机微点阵模型 271
7.8.6 代码实现:创建集合的微点阵模型 271
7.8.7 代码实现:定义评估与训练函式 272
7.8.8 代码实现:训练并评估模型 273
7.8.9 扩展:将点阵模型嵌入神经网路中 274
7.9 实例38:结合知识图谱实现基于电影的推荐系统 278
7.9.1 準备数据集 278
7.9.2 预处理数据 279
7.9.3 搭建MKR模型 279
7.9.4 训练模型并输出结果 286
7.10 可解释性算法的意义 286
第8章 卷积神经网路(CNN)——在图像处理中套用最广泛的模型 287
8.1 快速导读 287
8.1.1 认识卷积神经网路 287
8.1.2 什幺是空洞卷积 288
8.1.3 什幺是深度卷积 290
8.1.4 什幺是深度可分离卷积 290
8.1.5 了解卷积网路的缺陷及补救方法 291
8.1.6 了解胶囊神经网路与动态路由 292
8.1.7 了解矩阵胶囊网路与EM路由算法 297
8.1.8 什幺是NLP任务 298
8.1.9 了解多头注意力机制与内部注意力机制 298
8.1.10 什幺是带有位置向量的词嵌入 300
8.1.11 什幺是目标检测任务 300
8.1.12 什幺是目标检测中的上採样与下採样 301
8.1.13 什幺是图片分割任务 301
8.2 实例39:用胶囊网路识别黑白图中服装的图案 302
8.2.1 熟悉样本:了解Fashion-MNIST数据集 302
8.2.2 下载Fashion-MNIST数据集 303
8.2.3 代码实现:读取及显示Fashion-MNIST数据集中的数据 304
8.2.4 代码实现:定义胶囊网路模型类CapsuleNetModel 305
8.2.5 代码实现:实现胶囊网路的基本结构 306
8.2.6 代码实现:构建胶囊网路模型 309
8.2.7 代码实现:载入数据集,并训练胶囊网路模型 310
8.2.8 代码实现:建立会话训练模型 311
8.2.9 运行程式 313
8.2.10 实例40:实现带有EM路由的胶囊网路 314
8.3 实例41:用TextCNN模型分析评论者是否满意 322
8.3.1 熟悉样本:了解电影评论数据集 322
8.3.2 熟悉模型:了解TextCNN模型 322
8.3.3 数据预处理:用preprocessing接口製作字典 323
8.3.4 代码实现:生成NLP文本数据集 326
8.3.5 代码实现:定义TextCNN模型 327
8.3.6 代码实现:训练TextCNN模型 330
8.3.7 运行程式 332
8.3.8 扩展:提升模型精度的其他方法 333
8.4 实例42:用带注意力机制的模型分析评论者是否满意 333
8.4.1 熟悉样本:了解tf.keras接口中的电影评论数据集 333
8.4.2 代码实现:将tf.keras接口中的IMDB数据集还原成句子 334
8.4.3 代码实现:用tf.keras接口开发带有位置向量的词嵌入层 336
8.4.4 代码实现:用tf.keras接口开发注意力层 338
8.4.5 代码实现:用tf.keras接口训练模型 340
8.4.6 运行程式 341
8.4.7 扩展:用Targeted Dropout技术进一步提升模型的性能 342
8.5 实例43:搭建YOLO V3模型,识别图片中的酒杯、水果等物体 343
8.5.1 YOLO V3模型的样本与结构 343
8.5.2 代码实现:Darknet-53 模型的darknet块 344
8.5.3 代码实现:Darknet-53 模型的下採样卷积 345
8.5.4 代码实现:搭建Darknet-53模型,并返回3种尺度特徵值 345
8.5.5 代码实现:定义YOLO检测模组的参数及候选框 346
8.5.6 代码实现:定义YOLO检测块,进行多尺度特徵融合 347
8.5.7 代码实现:将YOLO检测块的特徵转化为bbox attrs单元 347
8.5.8 代码实现:实现YOLO V3的检测部分 349
8.5.9 代码实现:用非极大值抑制算法对检测结果去重 352
8.5.10 代码实现:载入预训练权重 355
8.5.11 代码实现:载入图片,进行目标实物的识别 356
8.5.12 运行程式 358
8.6 实例44:用YOLO V3模型识别门牌号 359
8.6.1 工程部署:準备样本 359
8.6.2 代码实现:读取样本数据,并製作标籤 359
8.6.3 代码实现:用tf.keras接口构建YOLO V3模型,并计算损失 364
8.6.4 代码实现:在动态图中训练模型 368
8.6.5 代码实现:用模型识别门牌号 372
8.6.6 扩展:标注自己的样本 374
8.7 实例45:用Mask R-CNN模型定位物体的像素点 375
8.7.1 下载COCO数据集及安装pycocotools 376
8.7.2 代码实现:验证pycocotools及读取COCO数据集 377
8.7.3 拆分Mask R-CNN模型的处理步骤 383
8.7.4 工程部署:準备代码档案及模型 385
8.7.5 代码实现:载入数据构建模型,并输出模型权重 385
8.7.6 代码实现:搭建残差网路ResNet 387
8.7.7 代码实现:搭建Mask R-CNN模型的骨干网路ResNet 393
8.7.8 代码实现:可视化Mask R-CNN模型骨干网路的特徵输出 396
8.7.9 代码实现:用特徵金字塔网路处理骨干网路特徵 400
8.7.10 计算RPN中的锚点 402
8.7.11 代码实现:构建RPN 403
8.7.12 代码实现:用非极大值抑制算法处理RPN的结果 405
8.7.13 代码实现:提取RPN的检测结果 410
8.7.14 代码实现:可视化RPN的检测结果 412
8.7.15 代码实现:在MaskRCNN类中对ROI区域进行分类 415
8.7.16 代码实现:金字塔网路的区域对齐层(ROIAlign)中的区域框与特徵的匹配算法 416
8.7.17 代码实现:在金字塔网路的ROIAlign层中按区域框线提取内容 418
8.7.18 代码实现:调试并输出ROIAlign层的内部运算值 421
8.7.19 代码实现:对ROI内容进行分类 422
8.7.20 代码实现:用检测器DetectionLayer检测ROI内容,得到最终的实物矩形 426
8.7.21 代码实现:根据ROI内容进行实物像素分割 432
8.7.22 代码实现:用Mask R-CNN模型分析图片 436
8.8 实例46:训练Mask R-CNN模型,进行形状的识别 439
8.8.1 工程部署:準备代码档案及模型 440
8.8.2 样本準备:生成随机形状图片 440
8.8.3 代码实现:为Mask R-CNN模型添加损失函式 442
8.8.4 代码实现:为Mask R-CNN模型添加训练函式,使其支持微调与全网训练 444
8.8.5 代码实现:训练并使用模型 446
8.8.6 扩展:替换特徵提取网路 449
第9章 循环神经网路(RNN)——处理序列样本的神经网路 450
9.1 快速导读 450
9.1.1 什幺是循环神经网路 450
9.1.2 了解RNN模型的基础单元LSTM与GRU 451
9.1.3 认识QRNN单元 451
9.1.4 认识SRU单元 451
9.1.5 认识IndRNN单元 452
9.1.6 认识JANET单元 453
9.1.7 最佳化RNN模型的技巧 453
9.1.8 了解RNN模型中多项式分布的套用 453
9.1.9 了解注意力机制的Seq2Seq框架 454
9.1.10 了解BahdanauAttention与LuongAttention 456
9.1.11 了解单调注意力机制 457
9.1.12 了解混合注意力机制 458
9.1.13 了解Seq2Seq接口中的採样接口(Helper) 460
9.1.14 了解RNN模型的Wrapper接口 460
9.1.15 什幺是时间序列(TFTS)框架 461
9.1.16 什幺是梅尔标度 461
9.1.17 什幺是短时傅立叶变换 462
9.2 实例47:搭建RNN模型,为女孩生成英文名字 463
9.2.1 代码实现:读取及处理样本 463
9.2.2 代码实现:构建Dataset数据集 466
9.2.3 代码实现:用tf.keras接口构建生成式RNN模型 467
9.2.4 代码实现:在动态图中训练模型 468
9.2.5 代码实现:载入检查点档案并用模型生成名字 469
9.2.6 扩展:用RNN模型编写文章 471
9.3 实例48:用带注意力机制的Seq2Seq模型为图片添加内容描述 471
9.3.1 设计基于图片的Seq2Seq 471
9.3.2 代码实现:图片预处理——用ResNet提取图片特徵并保存 472
9.3.3 代码实现:文本预处理——过滤处理、字典建立、对齐与向量化处理 475
9.3.4 代码实现:创建数据集 477
9.3.5 代码实现:用tf.keras接口构建Seq2Seq模型中的编码器 477
9.3.6 代码实现:用tf.keras接口构建Bahdanau类型的注意力机制 478
9.3.7 代码实现:搭建Seq2Seq模型中的解码器Decoder 478
9.3.8 代码实现:在动态图中计算Seq2Seq模型的梯度 480
9.3.9 代码实现:在动态图中为Seq2Seq模型添加保存检查点功能 480
9.3.10 代码实现:在动态图中训练Seq2Seq模型 481
9.3.11 代码实现:用多项式分布採样获取图片的内容描述 482
9.4 实例49:用IndRNN与IndyLSTM单元製作聊天机器人 485
9.4.1 下载及处理样本 486
9.4.2 代码实现:读取样本,分词并创建字典 487
9.4.3 代码实现:对样本进行向量化、对齐、填充预处理 489
9.4.4 代码实现:在Seq2Seq模型中加工样本 489
9.4.5 代码实现:在Seq2Seq模型中,实现基于IndRNN与IndyLSTM的
动态多层RNN编码器 491
9.4.6 代码实现:为Seq2Seq模型中的解码器创建Helper 491
9.4.7 代码实现:实现带有Bahdanau注意力、dropout、OutputProjectionWrapper的解码器 492
9.4.8 代码实现:在Seq2Seq模型中实现反向最佳化 493
9.4.9 代码实现:创建带有钩子函式的估算器,并进行训练 494
9.4.10 代码实现:用估算器框架评估模型 496
9.4.11 扩展:用注意力机制的Seq2Seq模型实现中英翻译 498
9.5 实例50:预测飞机发动机的剩余使用寿命 498
9.5.1 準备样本 499
9.5.2 代码实现:预处理数据——製作数据集的输入样本与标籤 500
9.5.3 代码实现:构建带有JANET单元的多层动态RNN模型 504
9.5.4 代码实现:训练并测试模型 505
9.5.5 运行程式 507
9.5.6 扩展:为含有JANET单元的RNN模型添加注意力机制 508
9.6 实例51:将动态路由用于RNN模型,对路透社新闻进行分类 509
9.6.1 準备样本 509
9.6.2 代码实现:预处理数据——对齐序列数据并计算长度 510
9.6.3 代码实现:定义数据集 510
9.6.4 代码实现:用动态路由算法聚合信息 511
9.6.5 代码实现:用IndyLSTM单元搭建RNN模型 513
9.6.6 代码实现:建立会话,训练网路 514
9.6.7 扩展:用分级网路将文章(长文本数据)分类 515
9.7 实例52:用TFTS框架预测某地区每天的出生人数 515
9.7.1 準备样本 515
9.7.2 代码实现:数据预处理——製作TFTS框架中的读取器 515
9.7.3 代码实现:用TFTS框架定义模型,并进行训练 516
9.7.4 代码实现:用TFTS框架评估模型 517
9.7.5 代码实现:用模型进行预测,并将结果可视化 517
9.7.6 运行程式 518
9.7.7 扩展:用TFTS框架进行异常值检测 519
9.8 实例53:用Tacotron模型合成中文语音(TTS) 520
9.8.1 準备安装包及样本数据 520
9.8.2 代码实现:将音频数据分帧并转为梅尔频谱 521
9.8.3 代码实现:用多进程预处理样本并保存结果 523
9.8.4 拆分Tacotron网路模型的结构 525
9.8.5 代码实现:搭建CBHG网路 527
9.8.6 代码实现:构建带有混合注意力机制的模组 529
9.8.7 代码实现:构建自定义wrapper 531
9.8.8 代码实现:构建自定义採样器 534
9.8.9 代码实现:构建自定义解码器 537
9.8.10 代码实现:构建输入数据集 539
9.8.11 代码实现:构建Tacotron网路 542
9.8.12 代码实现:构建Tacotron网路模型的训练部分 545
9.8.13 代码实现:训练模型併合成音频档案 546
9.8.14 扩展:用pypinyin模组实现文字到声音的转换 551
第4篇 高级
第10章 生成式模型——能够输出内容的模型 554
10.1 快速导读 554
10.1.1 什幺是自编码网路模型 554
10.1.2 什幺是对抗神经网路模型 554
10.1.3 自编码网路模型与对抗神经网路模型的关係 555
10.1.4 什幺是批量归一化中的自适应模式 555
10.1.5 什幺是实例归一化 556
10.1.6 了解SwitchableNorm及更多的归一化方法 556
10.1.7 什幺是图像风格转换任务 557
10.1.8 什幺是人脸属性编辑任务 558
10.1.9 什幺是TFgan框架 558
10.2 实例54:构建DeblurGAN模型,将模糊相片变清晰 559
10.2.1 获取样本 559
10.2.2 準备SwitchableNorm算法模组 560
10.2.3 代码实现:构建DeblurGAN中的生成器模型 560
10.2.4 代码实现:构建DeblurGAN中的判别器模型 562
10.2.5 代码实现:搭建DeblurGAN的完整结构 563
10.2.6 代码实现:引入库档案,定义模型参数 563
10.2.7 代码实现:定义数据集,构建正反向模型 564
10.2.8 代码实现:计算特徵空间损失,并将其编译到生成器模型的训练模型中 566
10.2.9 代码实现:按指定次数训练模型 568
10.2.10 代码实现:用模型将模糊相片变清晰 569
10.2.11 练习题 572
10.2.12 扩展:DeblurGAN模型的更多妙用 572
10.3 实例55:构建AttGAN模型,对照片进行加鬍子、加头帘、加眼镜、变年轻等修改 573
10.3.1 获取样本 573
10.3.2 了解AttGAN模型的结构 574
10.3.3 代码实现:实现支持动态图和静态图的数据集工具类 575
10.3.4 代码实现:将CelebA做成数据集 577
10.3.5 代码实现:构建AttGAN模型的编码器 581
10.3.6 代码实现:构建含有转置卷积的解码器模型 582
10.3.7 代码实现:构建AttGAN模型的判别器模型部分 584
10.3.8 代码实现:定义模型参数,并构建AttGAN模型 585
10.3.9 代码实现:定义训练参数,搭建正反向模型 587
10.3.10 代码实现:训练模型 592
10.3.11 实例56:为人脸添加不同的眼镜 595
10.3.12 扩展:AttGAN模型的局限性 597
10.4 实例57:用RNN.WGAN模型模拟生成恶意请求 597
10.4.1 获取样本:通过Panabit设备获取恶意请求样本 597
10.4.2 了解RNN.WGAN模型 600
10.4.3 代码实现:构建RNN.WGAN模型 601
10.4.4 代码实现:训练指定长度的RNN.WGAN模型 607
10.4.5 代码实现:用长度依次递增的方式训练模型 612
10.4.6 运行代码 613
10.4.7 扩展:模型的使用及最佳化 614
第11章 模型的攻与防——看似智慧型的AI也有脆弱的一面 616
11.1 快速导读 616
11.1.1 什幺是FGSM方法 616
11.1.2 什幺是cleverhans模组 616
11.1.3 什幺是黑箱攻击 617
11.1.4 什幺是基于雅可比矩阵的数据增强方法 618
11.1.5 什幺是数据中毒攻击 620
11.2 实例58:用FGSM方法生成样本,并攻击PNASNet模型,让其将“狗”识别成“盘子” 621
11.2.1 代码实现:创建PNASNet模型 621
11.2.2 代码实现:搭建输入层并载入图片,复现PNASNet模型的预测效果 623
11.2.3 代码实现:调整参数,定义图片的变化範围 624
11.2.4 代码实现:用梯度下降方式生成对抗样本 625
11.2.5 代码实现:用生成的样本攻击模型 626
11.2.6 扩展:如何防範攻击模型的行为 627
11.2.7 代码实现:将数据增强方式用在使用场景,以加固PNASNet模型,防範攻击 627
11.3 实例59:击破数据增强防护,製作抗旋转对抗样本 629
11.3.1 代码实现:对输入的数据进行多次旋转 629
11.3.2 代码实现:生成并保存鲁棒性更好的对抗样本 630
11.3.3 代码实现:在PNASNet模型中比较对抗样本的效果 631
11.4 实例60:以黑箱方式攻击未知模型 633
11.4.1 準备工程代码 633
11.4.2 代码实现:搭建通用模型框架 634
11.4.3 代码实现:搭建被攻击模型 637
11.4.4 代码实现:训练被攻击模型 638
11.4.5 代码实现:搭建替代模型 639
11.4.6 代码实现:训练替代模型 639
11.4.7 代码实现:黑箱攻击目标模型 641
11.4.8 扩展:利用黑箱攻击中的对抗样本加固模型 645
第5篇 实战——深度学习实际套用
第12章 TensorFlow模型製作——一种功能,多种身份 648
12.1 快速导读 648
12.1.1 详细分析检查点档案 648
12.1.2 什幺是模型中的冻结图 649
12.1.3 什幺是TF Serving模组与saved_model模组 649
12.1.4 用编译子图(defun)提升动态图的执行效率 649
12.1.5 什幺是TF_Lite模组 652
12.1.6 什幺是TFjs-converter模组 653
12.2 实例61:在源码与检查点档案分离的情况下,对模型进行二次训练 653
12.2.1 代码实现:线上性回归模型中,向检查点档案中添加指定节点 654
12.2.2 代码实现:在脱离源码的情况下,用检查点档案进行二次训练 657
12.2.3 扩展:更通用的二次训练方法 659
12.3 实例62:导出/导入冻结图档案 661
12.3.1 熟悉TensorFlow中的freeze_graph工具脚本 661
12.3.2 代码实现:从线性回归模型中导出冻结图档案 662
12.3.3 代码实现:导入冻结图档案,并用模型进行预测 664
12.4 实例63:逆向分析冻结图档案 665
12.4.1 使用import_to_tensorboard工具 666
12.4.2 用TensorBoard工具查看模型结构 666
12.5 实例64:用saved_model模组导出与导入模型档案 668
12.5.1 代码实现:用saved_model模组导出模型档案 668
12.5.2 代码实现:用saved_model模组导入模型档案 669
12.5.3 扩展:用saved_model模组导出带有签名的模型档案 670
12.6 实例65:用saved_model_cli工具查看及使用saved_model模型 672
12.6.1 用show参数查看模型 672
12.6.2 用run参数运行模型 673
12.6.3 扩展:了解scan参数的黑名单机制 674
12.7 实例66:用TF-Hub库导入、导出词嵌入模型档案 674
12.7.1 代码实现:模拟生成通用词嵌入模型 674
12.7.2 代码实现:用TF-Hub库导出词嵌入模型 675
12.7.3 代码实现:导出TF-Hub模型 678
12.7.4 代码实现:用TF-Hub库导入并使用词嵌入模型 680
第13章 部署TensorFlow模型——模型与项目的深度结合 681
13.1 快速导读 681
13.1.1 什幺是gRPC服务与HTTP/REST API 681
13.1.2 了解TensorFlow对移动终端的支持 682
13.1.3 了解树莓派上的人工智慧 683
13.2 实例67:用TF_Serving部署模型并进行远程使用 684
13.2.1 在Linux系统中安装TF_Serving 684
13.2.2 在多平台中用Docker安装TF_Serving 685
13.2.3 编写代码:固定模型的签名信息 686
13.2.4 在Linux中开启TF_Serving服务 688
13.2.5 编写代码:用gRPC访问远程TF_Serving服务 689
13.2.6 用HTTP/REST API访问远程TF_Serving服务 691
13.2.7 扩展:关于TF_Serving的更多例子 694
13.3 实例68:在安卓手机上识别男女 694
13.3.1 準备工程代码 694
13.3.2 微调预训练模型 695
13.3.3 搭建安卓开发环境 698
13.3.4 製作lite模型档案 701
13.3.5 修改分类器代码,并运行App 702
13.4 实例69:在iPhone手机上识别男女并进行活体检测 703
13.4.1 搭建iOS开发环境 703
13.4.2 部署工程代码并编译 704
13.4.3 载入Lite模型,实现识别男女功能 706
13.4.4 代码实现:调用摄像头并採集视频流 707
13.4.5 代码实现:提取人脸特徵 710
13.4.6 活体检测算法介绍 712
13.4.7 代码实现:实现活体检测算法 713
13.4.8 代码实现:完成整体功能并运行程式 714
13.5 实例70:在树莓派上搭建一个目标检测器 717
13.5.1 安装树莓派系统 718
13.5.2 在树莓派上安装TensorFlow 721
13.5.3 编译并安装Protobuf 725
13.5.4 安装OpenCV 726
13.5.5 下载目标检测模型SSDLite 726
13.5.6 代码实现:用SSDLite 模型进行目标检测 727
第14章 商业实例——科技源于生活,用于生活 730
14.1 实例71:将特徵匹配技术套用在商标识别领域 730
14.1.1 项目背景 730
14.1.2 技术方案 730
14.1.3 预处理图片——统一尺寸 731
14.1.4 用自编码网路加夹角余弦实现商标识别 731
14.1.5 用卷积网路加triplet-loss提升特徵提取效果 731
14.1.6 进一步的最佳化空间 732
14.2 实例72:用RNN抓取蠕虫病毒 732
14.2.1 项目背景 733
14.2.2 判断是否恶意域名不能只靠域名 733
14.2.3 如何识别恶意域名 733
14.3 实例73:迎宾机器人的技术关注点——体验优先 734
14.3.1 迎宾机器人的产品背景 734
14.3.2 迎宾机器人的实现方案 734
14.3.3 迎宾机器人的同类产品 736
14.4 实例74:基于摄像头的路边停车场项目 737
14.4.1 项目背景 737
14.4.2 技术方案 738
14.4.3 方案缺陷 738
14.4.4 工程化补救方案 738
14.5 实例75:智慧型冰柜产品——硬体成本之痛 739
14.5.1 智慧型冰柜系列的产品背景 739
14.5.2 智慧型冰柜的技术基础 740
14.5.3 真实的非功能性需求——低成本 740
14.5.4 未来的技术趋势及应对策略 741

作者简介

本书由李金洪主笔编写,参与本书编写的还有以下作者。
石昌帅
代码医生工作室成员,具有丰富的嵌入式及算法开发经验,参与多款机器人、图像识别等项目开发,擅长机器人定位、导航技术、计算机视觉技术,熟悉NVIDIA jetson系列、Raspberry PI系列等平台软硬体开发、算法最佳化。从事的技术方向包括机器人导航、图像处理、自动驾驶等。
甘月
代码医生工作室成员,资深iOS高级工程师,有丰富的iOS研发经验,先后担任iOS主管、项目经理、iOS技术总监等职务,精通Objective-C、Swift、C等程式语言,参与过银行金融、娱乐机器人、婚庆、医疗等领域的多个项目。擅长Mac系统下的AI技术开发。
江枭宇
代码医生工作室成员,是大蛇智慧型社区成长最快的AI学者。半年时间,由普通读者升级为社区的资深辅导员。在校期间曾参加过电子设计大赛(获省级一等奖)、Google校企合作的AI创新项目、省级创新训练AI项目。熟悉Python、C和Java等程式语言。擅长图像处理方向、特徵工程方向及语义压缩方向的AI任务。
标签:
随机快审展示 刷新 快审榜
加入快审,优先展示

加入VIP

发表评论

  • * 评论内容:
  •  

精彩评论

  • 无任何评论信息!
提交站点
提交文章
提交小程序
提交公众号