第一篇 TensorFlow基础篇 2
第1章 绪论 2
1.1 人工智能简介 2
1.2 卷积神经网络 3
1.3 搭建TensorFlow框架环境 5
1.3.1 安装Anaconda 5
1.3.2 安装TensorFlow 7
第2章 TensorFlow基础入门 9
2.1 第一个TensorFlow程序 9
2.1.1 TensorFlow中的hello world 9
2.1.2 TensorFlow中的图 11
2.1.3 静态图与动态图 14
2.2 初识Session 15
2.2.1 将Session对象关联Graph对象 15
2.2.2 Session参数配置 17
2.3 常量与变量 18
2.3.1 TensorFlow中的常量 18
2.3.2 TensorFlow中的变量 20
2.3.3 TensorFlow中的tf.placeholder 28
2.4 Tensor对象 29
2.4.1 什么是Tensor对象 29
2.4.2 Python对象转Tensor对象 31
2.4.3 Tensor对象转Python对象 32
2.4.4 SparseTensor对象 34
2.4.5 强制转换Tensor对象数据类型 35
2.5 Operation对象 37
2.5.1 什么是Operation对象 37
2.5.2 获取并执行Operation对象 37
2.6 TensorFlow流程控制 40
2.6.1 条件判断tf.cond与tf.where 40
2.6.2 TensorFlow比较判断 43
2.6.3 TensorFlow逻辑运算 44
2.6.4 循环tf.while_loop 45
2.7 TensorFlow位运算 48
2.7.1 且位运算 48
2.7.2 或位运算 49
2.7.3 异或位运算 50
2.7.4 取反位运算 51
2.8 TensorFlow字符串 52
2.8.1 字符串的定义与转换 53
2.8.2 字符串拆分 55
2.8.3 字符串拼接 56
第3章 高维Tensor对象的工具函数 58
3.1 重定义Shape 58
3.1.1 Reshape原理 58
3.1.2 函数tf.reshape 59
3.1.3 使用Python实现Reshape 60
3.2 维度交换函数 62
3.2.1 Transpose原理 62
3.2.2 函数tf.transpose 63
3.2.3 使用Python实现Transpose 64
3.3 维度扩充与消除 65
3.3.1 函数tf.expand_dims 65
3.3.2 函数tf.squeeze 66
3.4 Tensor对象裁剪 68
3.4.1 Tensor对象裁剪原理 68
3.4.2 函数tf.slice 69
3.5 Tensor对象拼接 70
3.5.1 Tensor对象拼接原理 70
3.5.2 函数tf.concat使用 71
3.6 tf.stack与tf.unstack 72
3.6.1 函数tf.stack的原理 72
3.6.2 函数tf.stack的使用 73
3.6.3 函数tf.unstack的使用 76
3.7 tf.argmax与tf.argmin 79
3.7.1 函数tf.argmax与tf.argmin的原理 79
3.7.2 函数tf.argmax与tf.argmin的使用 79
第二篇 卷积神经网络篇 83
第4章 前馈网络 83
4.1 卷积 83
4.1.1 卷积的原理 83
4.1.2 输出宽高与输入、Stride、卷积核及Padding之间的关系 90
4.1.3 空洞卷积 92
4.1.4 在TensorFlow中使用卷积 93
4.1.5 用Python语言实现卷积算法 95
4.2 反卷积 97
4.2.1 反卷积的原理 97
4.2.2 输出宽高与输入、Stride、反卷积核及Padding之间的关系 103
4.2.3 在TensorFlow中使用反卷积 105
4.2.4 用Python语言实现反卷积算法 110
4.3 Batch Normalization 113
4.3.1 Batch Normalization的原理 113
4.3.2 在TensorFlow中使用Batch Normalization 114
4.3.3 用Python语言实现Batch Normalization 122
4.3.4 在TensorFlow中使用Batch Normalization时的注意事项 123
4.4 Instance Normalization 125
4.4.1 Instance Normalization的原理 125
4.4.2 在TensorFlow中使用Instance Normalization 126
4.4.3 用Python语言实现Instance Normalization 130
4.5 全连接层 132
4.5.1 全连接层的原理 132
4.5.2 在TensorFlow中使用全连接层 133
4.5.3 用Python语言实现全连接层 134
4.6 激活函数 135
4.6.1 激活函数的作用 135
4.6.2 Sigmoid函数 136
4.6.3 Tanh函数 138
4.6.4 ReLU函数 140
4.7 池化层 142
4.7.1 池化层的原理 142
4.7.2 在TensorFlow中使用池化层 146
4.7.3 用Python语言实现池化层 150
4.8 Dropout 153
4.8.1 Dropout的作用 153
4.8.2 在TensorFlow中使用Dropout 154
第5章 常见网络 156
5.1 移动端定制卷积神经网络——MobileNet 156
5.1.1 MobileNet的原理与优势 156
5.1.2 在TensorFlow中实现MobileNet卷积 158
5.1.3 用Python语言实现Depthwise卷积 164
5.1.4 MobileNet完整的网络结构 167
5.1.5 MobileNet V2进一步裁剪加速 168
5.2 深度残差网络——ResNet 171
5.2.1 ResNet的结构与优势 171
5.2.2 在TensorFlow中实现ResNet 172
5.2.3 完整的ResNet网络结构 175
5.3 DenseNet 176
5.3.1 DenseNet的结构与优势 176
5.3.2 在TensorFlow中实现DenseNet 177
5.3.3 完整的DenseNet网络结构 180
第三篇 TensorFlow进阶篇 183
第6章 TensorFlow数据存取 183
6.1 队列 183
6.1.1 构建队列 183
6.1.2 Queue、QueueRunner及Coordinator 190
6.1.3 在队列中批量读取数据 194
6.2 文件存取 200
6.2.1 读取文本文件 200
6.2.2 读取定长字节文件 202
6.2.3 读取图片 205
6.3 从CSV文件中读取训练集 207
6.3.1 解析CSV格式文件 207
6.3.2 封装CSV文件读取类 209
6.4 从自定义文本格式文件中读取训练集 210
6.4.1 解析自定义文本格式文件 211
6.4.2 封装自定义文本格式文件读取类 212
6.5 TFRecord方式存取数据 213
6.5.1 将数据写入TFRecord文件 214
6.5.2 从TFRecord文件中读取数据 215
6.6 模型存取 217
6.6.1 存储模型 217
6.6.2 从checkpoint文件中加载模型 220
6.6.3 从meta文件中加载模型 222
6.6.4 将模型导出为单个pb文件 223
第7章 TensorFlow数据预处理 226
7.1 随机光照变化 226
7.1.1 随机饱和度变化 226
7.1.2 随机色相变化 228
7.1.3 随机对比度变化 230
7.1.4 随机亮度变化 232
7.1.5 随机伽玛变化 234
7.2 翻转、转置与旋转 237
7.2.1 随机上下、左右翻转 237
7.2.2 随机图像转置 239
7.2.3 随机旋转 241
7.3 裁剪与Resize 245
7.3.1 图像裁剪 245
7.3.2 图像Resize 249
7.3.3 其他Resize函数 254
7.4 用OpenCV对图像进行动态预处理 256
7.4.1 静态预处理与动态预处理 256
7.4.2 在TensorFlow中调用OpenCV 257
第8章 TensorFlow模型训练 260
8.1 反向传播中的优化器与学习率 260
8.1.1 Global Step与Epoch 260
8.1.2 梯度理论 260
8.1.3 使用学习率与梯度下降法求最优值 262
8.1.4 TensorFlow中的优化器 265
8.1.5 优化器中常用的函数 265
8.1.6 在TensorFlow中动态调整学习率 269
8.2 模型数据与参数名称映射 273
8.2.1 通过名称映射加载 273
8.2.2 以pickle文件为中介加载模型 275
8.3 冻结指定参数 277
8.3.1 从模型中加载部分参数 277
8.3.2 指定网络层参数不参与更新 278
8.3.3 两个学习率同时训练 280
8.4 TensorFlow中的命名空间 282
8.4.1 使用tf.variable_scope添加名称前缀 282
8.4.2 使用tf.name_scope添加名称前缀 284
8.4.3 tf.variable_scope与tf.name_scope的混合使用 285
8.5 TensorFlow多GPU训练 286
8.5.1 多GPU训练读取数据 286
8.5.2 平均梯度与参数更新 289
第9章 TensorBoard可视化工具 293
9.1 可视化静态图 293
9.1.1 图结构系列化并写入文件 293
9.1.2 启动TensorBoard 294
9.2 图像显示 296
9.2.1 系列化图像Tensor并写入文件 296
9.2.2 用TensorBoard查看图像 299
9.3 标量曲线 301
9.3.1 系列化标量Tensor并写入文件 301
9.3.2 用TensorBoard查看标量曲线 302
9.4 参数直方图 303
9.4.1 系列化参数Tensor并写入文件 303
9.4.2 用TensorBoard查看参数直方图 304
9.5 文本显示 306
9.5.1 系列化文本Tensor并写入文件 306
9.5.2 用TensorBoard查看文本 307
第四篇 卷积神经网络实战篇 310
第10章 中文手写字识别 310
10.1 网络结构及数据集 310
10.1.1 网络结构 310
10.1.2 数据集 311
10.2 代码实现 312
10.2.1 封装通用网络层 312
10.2.2 定义网络结构 314
10.2.3 数据读取 316
10.2.4 训练代码实现 318
10.3 模型训练 321
10.4 模型精度测试 321
10.4.1 精度测试 322
10.4.2 代码实现 322
第11章 移植模型到TensorFlow Serving端 324
11.1 模型转换 324
11.1.1 转换模型为TensorFlow Serving模型 324
11.1.2 代码实现 327
11.2 模型部署 329
11.2.1 搭建TensorFlow Serving环境 329
11.2.2 启动TensorFlow Serving服务 331
11.3 HTTP服务实现 333
11.3.1 使用gRPC调用TensorFlow Serving服务 333
11.3.2 实现HTTP服务 334
11.4 前端交互实现 336
11.4.1 界面布局 336
11.4.2 手写板实现 337
11.4.3 数据交互 339
11.4.4 流程测试 340
第12章 移植TensorFlow模型到Android端 341
12.1 交互界面 341
12.1.1 页面布局 341
12.1.2 实现手写板 342
12.2 使用TensorFlow Mobile库 346
12.2.1 模型转换 347
12.2.2 模型调用 347
12.2.3 模型测试 351
12.3 使用TensorFlow Lite库 354
12.3.1 模型转换 354
12.3.2 模型调用 355
12.3.3 模型测试 360
第13章 移植TensorFlow模型到iOS端 361
13.1 界面布局 361
13.1.1 页面布局 361
13.1.2 实现手写板 362
13.1.3 界面布局代码实现 366
13.2 TensorFlow模型转CoreML模型 369
13.2.1 模型转换 369
13.2.2 分析模型对象的调用接口 370
13.3 模型调用 373
13.3.1 实现模型调用 373
13.3.2 模型测试 376