TensorFlow与卷积神经网络从算法入门到项目实战
作者:华超
出版时间: 2019年版
内容简介
本书从TensorFlow基础讲起,逐步深入TensorFlow进阶实战,最后配合项目实战案例,重点介绍了实用TensorFlow库训练卷积神经网络模型并将模型移植到服务器端、Android端和iOS端的知识。读者不但可以系统地学习TensorFlow库的使用,还能加深对深度卷积神经网络的理解。本书分为4篇,共13章,涵盖的主要内容有人工智能发展历程,TensorFlow基础入门,高维Tensor对象的工具函数,前馈网络,常见网络,TensorFlow数据存取,TensorFlow数据预处理,TensorFlow模型训练,TensorBoard可视化工具,中文手写字识别,移植模型到TensorFlow Serving端,移植TensorFlow模型到Android端,移植TensorFlow模型到iOS端。
目录
目录
第一篇 TensorFlow基础篇
第1章 绪论\t2
1.1 人工智能简介\t2
1.2 卷积神经网络\t3
1.3 搭建TensorFlow框架环境\t5
1.3.1 安装Anaconda\t5
1.3.2 安装TensorFlow\t7
第2章 TensorFlow基础入门\t9
2.1 第一个TensorFlow程序\t9
2.1.1 TensorFlow中的hello world\t9
2.1.2 TensorFlow中的图\t11
2.1.3 静态图与动态图\t14
2.2 初识Session\t15
2.2.1 将Session对象关联Graph对象\t15
2.2.2 Session参数配置\t17
2.3 常量与变量\t18
2.3.1 TensorFlow中的常量\t18
2.3.2 TensorFlow中的变量\t20
2.3.3 TensorFlow中的tf.placeholder\t28
2.4 Tensor对象\t29
2.4.1 什么是Tensor对象\t29
2.4.2 Python对象转Tensor对象\t31
2.4.3 Tensor对象转Python对象\t32
2.4.4 SparseTensor对象\t34
2.4.5 强制转换Tensor对象数据类型\t35
2.5 Operation对象\t37
2.5.1 什么是Operation对象\t37
2.5.2 获取并执行Operation对象\t37
2.6 TensorFlow流程控制\t40
2.6.1 条件判断tf.cond与tf.where\t40
2.6.2 TensorFlow比较判断\t43
2.6.3 TensorFlow逻辑运算\t44
2.6.4 循环tf.while_loop\t45
2.7 TensorFlow位运算\t48
2.7.1 且位运算\t48
2.7.2 或位运算\t49
2.7.3 异或位运算\t50
2.7.4 取反位运算\t51
2.8 TensorFlow字符串\t52
2.8.1 字符串的定义与转换\t53
2.8.2 字符串拆分\t55
2.8.3 字符串拼接\t56
第3章 高维Tensor对象的工具函数\t58
3.1 重定义Shape\t58
3.1.1 Reshape原理\t58
3.1.2 函数tf.reshape\t59
3.1.3 使用Python实现Reshape\t60
3.2 维度交换函数\t62
3.2.1 Transpose原理\t62
3.2.2 函数tf.transpose\t63
3.2.3 使用Python实现Transpose\t64
3.3 维度扩充与消除\t65
3.3.1 函数tf.expand_dims\t65
3.3.2 函数tf.squeeze\t66
3.4 Tensor对象裁剪\t68
3.4.1 Tensor对象裁剪原理\t68
3.4.2 函数tf.slice\t69
3.5 Tensor对象拼接\t70
3.5.1 Tensor对象拼接原理\t70
3.5.2 函数tf.concat使用\t71
3.6 tf.stack与tf.unstack\t72
3.6.1 函数tf.stack的原理\t72
3.6.2 函数tf.stack的使用\t73
3.6.3 函数tf.unstack的使用\t76
3.7 tf.argmax与tf.argmin\t79
3.7.1 函数tf.argmax与tf.argmin的原理\t79
3.7.2 函数tf.argmax与tf.argmin的使用\t79
第二篇 卷积神经网络篇
第4章 前馈网络\t83
4.1 卷积\t83
4.1.1 卷积的原理\t83
4.1.2 输出宽高与输入、Stride、卷积核及Padding之间的关系\t90
4.1.3 空洞卷积\t92
4.1.4 在TensorFlow中使用卷积\t93
4.1.5 用Python语言实现卷积算法\t95
4.2 反卷积\t97
4.2.1 反卷积的原理\t97
4.2.2 输出宽高与输入、Stride、反卷积核及Padding之间的关系\t103
4.2.3 在TensorFlow中使用反卷积\t105
4.2.4 用Python语言实现反卷积算法\t110
4.3 Batch Normalization\t113
4.3.1 Batch Normalization的原理\t113
4.3.2 在TensorFlow中使用Batch Normalization\t114
4.3.3 用Python语言实现Batch Normalization\t122
4.3.4 在TensorFlow中使用Batch Normalization时的注意事项\t123
4.4 Instance Normalization\t125
4.4.1 Instance Normalization的原理\t125
4.4.2 在TensorFlow中使用Instance Normalization\t126
4.4.3 用Python语言实现Instance Normalization\t130
4.5 全连接层\t132
4.5.1 全连接层的原理\t132
4.5.2 在TensorFlow中使用全连接层\t133
4.5.3 用Python语言实现全连接层\t134
4.6 激活函数\t135
4.6.1 激活函数的作用\t135
4.6.2 Sigmoid函数\t136
4.6.3 Tanh函数\t138
4.6.4 ReLU函数\t140
4.7 池化层\t142
4.7.1 池化层的原理\t142
4.7.2 在TensorFlow中使用池化层\t146
4.7.3 用Python语言实现池化层\t150
4.8 Dropout\t153
4.8.1 Dropout的作用\t153
4.8.2 在TensorFlow中使用Dropout\t154
第5章 常见网络\t156
5.1 移动端定制卷积神经网络――MobileNet\t156
5.1.1 MobileNet的原理与优势\t156
5.1.2 在TensorFlow中实现MobileNet卷积\t158
5.1.3 用Python语言实现Depthwise卷积\t164
5.1.4 MobileNet完整的网络结构\t167
5.1.5 MobileNet V2进一步裁剪加速\t168
5.2 深度残差网络――ResNet\t171
5.2.1 ResNet的结构与优势\t171
5.2.2 在TensorFlow中实现ResNet\t172
5.2.3 完整的ResNet网络结构\t175
5.3 DenseNet\t176
5.3.1 DenseNet的结构与优势\t176
5.3.2 在TensorFlow中实现DenseNet\t177
5.3.3 完整的DenseNet网络结构\t180
第三篇 TensorFlow进阶篇
第6章 TensorFlow数据存取\t183
6.1 队列\t183
6.1.1 构建队列\t183
6.1.2 Queue、QueueRunner及Coordinator\t190
6.1.3 在队列中批量读取数据\t194
6.2 文件存取\t200
6.2.1 读取文本文件\t200
6.2.2 读取定长字节文件\t202
6.2.3 读取图片\t205
6.3 从CSV文件中读取训练集\t207
6.3.1 解析CSV格式文件\t207
6.3.2 封装CSV文件读取类\t209
6.4 从自定义文本格式文件中读取训练集\t210
6.4.1 解析自定义文本格式文件\t211
6.4.2 封装自定义文本格式文件读取类\t212
6.5 TFRecord方式存取数据\t213
6.5.1 将数据写入TFRecord文件\t214
6.5.2 从TFRecord文件中读取数据\t215
6.6 模型存取\t217
6.6.1 存储模型\t217
6.6.2 从checkpoint文件中加载模型\t220
6.6.3 从meta文件中加载模型\t222
6.6.4 将模型导出为单个pb文件\t223
第7章 TensorFlow数据预处理\t226
7.1 随机光照变化\t226
7.1.1 随机饱和度变化\t226
7.1.2 随机色相变化\t228
7.1.3 随机对比度变化\t230
7.1.4 随机亮度变化\t232
7.1.5 随机伽玛变化\t234
7.2 翻转、转置与旋转\t237
7.2.1 随机上下、左右翻转\t237
7.2.2 随机图像转置\t239
7.2.3 随机旋转\t241
7.3 裁剪与Resize\t245
7.3.1 图像裁剪\t245
7.3.2 图像Resize\t249
7.3.3 其他Resize函数\t254
7.4 用OpenCV对图像进行动态预处理\t256
7.4.1 静态预处理与动态预处理\t256
7.4.2 在TensorFlow中调用OpenCV\t257
第8章 TensorFlow模型训练\t260
8.1 反向传播中的优化器与学习率\t260
8.1.1 Global Step与Epoch\t260
8.1.2 梯度理论\t260
8.1.3 使用学习率与梯度下降法求最优值\t262
8.1.4 TensorFlow中的优化器\t265
8.1.5 优化器中常用的函数\t265
8.1.6 在TensorFlow中动态调整学习率\t269
8.2 模型数据与参数名称映射\t273
8.2.1 通过名称映射加载\t273
8.2.2 以pickle文件为中介加载模型\t275
8.3 冻结指定参数\t277
8.3.1 从模型中加载部分参数\t277
8.3.2 指定网络层参数不参与更新\t278
8.3.3 两个学习率同时训练\t280
8.4 TensorFlow中的命名空间\t282
8.4.1 使用tf.variable_scope添加名称前缀\t282
8.4.2 使用tf.name_scope添加名称前缀\t284
8.4.3 tf.variable_scope与tf.name_scope的混合使用\t285
8.5 TensorFlow多GPU训练\t286
8.5.1 多GPU训练读取数据\t286
8.5.2 平均梯度与参数更新\t289
第9章 TensorBoard可视化工具\t293
9.1 可视化静态图\t293
9.1.1 图结构系列化并写入文件\t293
9.1.2 启动TensorBoard\t294
9.2 图像显示\t296
9.2.1 系列化图像Tensor并写入文件\t296
9.2.2 用TensorBoard查看图像\t299
9.3 标量曲线\t301
9.3.1 系列化标量Tensor并写入文件\t301
9.3.2 用TensorBoard查看标量曲线\t302
9.4 参数直方图\t303
9.4.1 系列化参数Tensor并写入文件\t303
9.4.2 用TensorBoard查看参数直方图\t304
9.5 文本显示\t306
9.5.1 系列化文本Tensor并写入文件\t306
9.5.2 用TensorBoard查看文本\t307
第四篇 卷积神经网络实战篇
第10章 中文手写字识别\t310
10.1 网络结构及数据集\t310
10.1.1 网络结构\t310
10.1.2 数据集\t311
10.2 代码实现\t312
10.2.1 封装通用网络层\t312
10.2.2 定义网络结构\t314
10.2.3 数据读取\t316
10.2.4 训练代码实现\t318
10.3 模型训练\t321
10.4 模型精度测试\t321
10.4.1 精度测试\t322
10.4.2 代码实现\t322
第11章 移植模型到TensorFlow Serving端\t324
11.1 模型转换\t324
11.1.1 转换模型为TensorFlow Serving模型\t324
11.1.2 代码实现\t327
11.2 模型部署\t329
11.2.1 搭建TensorFlow Serving环境\t329
11.2.2 启动TensorFlow Serving服务\t331
11.3 HTTP服务实现\t333
11.3.1 使用gRPC调用TensorFlow Serving服务\t333
11.3.2 实现HTTP服务\t334
11.4 前端交互实现\t336
11.4.1 界面布局\t336
11.4.2 手写板实现\t337
11.4.3 数据交互\t339
11.4.4 流程测试\t340
第12章 移植TensorFlow模型到Android端\t341
12.1 交互界面\t341
12.1.1 页面布局\t341
12.1.2 实现手写板\t342
12.2 使用TensorFlow Mobile库\t346
12.2.1 模型转换\t347
12.2.2 模型调用\t347
12.2.3 模型测试\t351
12.3 使用TensorFlow Lite库\t354
12.3.1 模型转换\t354
12.3.2 模型调用\t355
12.3.3 模型测试\t360
第13章 移植TensorFlow模型到iOS端\t361
13.1 界面布局\t361
13.1.1 页面布局\t361
13.1.2 实现手写板\t362
13.1.3 界面布局代码实现\t366
13.2 TensorFlow 模型转CoreML模型\t369
13.2.1 模型转换\t369
13.2.2 分析模型对象的调用接口\t370
13.3 模型调用\t373
13.3.1 实现模型调用\t373
13.3.2 模型测试\t376