猜你喜欢
TensorFlow与卷积神经网络从算法入门到项目实战

TensorFlow与卷积神经网络从算法入门到项目实战

书籍作者:华超 ISBN:9787121370786
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:9433
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书从TensorFlow基础讲起,逐步深入TensorFlow进阶实战,最后配合项目实战案例,重点介绍了实用TensorFlow库训练卷积神经网络模型并将模型移植到服务器端、Android端和iOS端的知识。读者不但可以系统地学习TensorFlow库的使用,还能加深对深度卷积神经网络的理解。

本书分为4篇,共13章,涵盖的主要内容有人工智能发展历程,TensorFlow基础入门,高维Tensor对象的工具函数,前馈网络,常见网络,TensorFlow数据存取,TensorFlow数据预处理,TensorFlow模型训练,TensorBoard可视化工具,中文手写字识别,移植模型到TensorFlow Serving端,移植TensorFlow模型到Android端,移植TensorFlow模型到iOS端。


作者简介

华超,毕业于武汉大学,硕士研究生,目前任职腾讯研究员,擅长深度卷积神经网络领域。拥有8年的开发经验,熟悉Android和iOS开发。研究领域为神经网络模型压缩和移动端模型移植,使移动端能实时运行神经网络模型,已为移动端上线多款实时运行模型。

编辑推荐
适读人群 :本书内容通俗易懂,案例丰富,实用性强,特别适合TensorFlow和深度卷积神经网络入门读者及进阶读者阅读,同时也适合后端开发、移动开发等其他编程爱好者阅读。另外,本书也适合作为相关培训机构的教材。

内容全:包含高维Tensor函数、CNN算法及TensorFlow实战等众多知识

看得懂:透过110多张图示,让你快速理解算法原理

学得会:配有40多个视频课程,随时随地轻松学

用得着:包括中文手写字识别、服务器移植、iOS移植及Android移植4个案例

有人帮:在读者交流QQ群里交流互动,有问必答


前言

前言



深度学习在计算机视觉领域取得的巨大成功,使得越来越多的开发人员准备或者正在转入这个领域。不过这方面大部分的网络资源都是从理论方面讲解卷积神经网络中网络层(如卷积、反卷积等)原理的,很少以简单例子并通过代码实现的方式介绍。初学者希望能快速理解抽象的理论原理,亲自动手设计网络结构并能完成模型的训练;有一定基础的人员希望能够对网络层节点原理有进一步理解。本书从最基础的内容出发,将实际项目中卷积神经网络用到的大部分函数和原理进行讲解并实践。

初入卷积神经网络领域的人员对高维数组(Tensor)的相关维度计算操作难以理解,阅读理论原理后也是一知半解。本书从TensorFlow基础开始讲解,再介绍卷积神经网络,然后介绍TensorFlow的进阶内容。在每一个知识点后均会附加示例代码以加深理解,最后以实际项目“中文手写字识别”对整本书内容进行综合运用。不管是初学者还是有一定经验的深度卷积神经网络开发人员,相信在阅读完本书后一定会收获颇丰。

因受作者水平和成书时间所限,书中难免存有疏漏之处,敬请广大读者批评指正。

本书特色

1. 内容由浅入深,TensorFlow的使用从基础到进阶

本书内容包含TensorFlow训练模型期间所用到的大部分函数和场景,也包括通过实例详细讲解的TensorFlow函数和模型训练技巧,这些都是笔者在实际项目中经验的提炼。

2. 手写代码实现卷积、反卷积等操作,让抽象的理论更容易理解

本书介绍了卷积神经网络中所使用到的大部分计算节点,并使用Python代码实现其等价算法。大部分关于卷积神经网络的资料介绍都过于抽象,往往使得读者一知半解。本书从实际代码搭配实际数据例子的角度介绍卷积神经网络,使卷积神经网络简单化、具体化,让读者更容易理解掌握。

3. 手写代码实现当前先进的卷积神经网络

大部分官方提供的现代先进的卷积神经网络结构源码封装太深,初学者往往需要花费很长时间理解。本书以简单的代码引导读者动手实现先进的网络结构,帮助读者理解。

4. 实现手写汉字识别,并移植到服务器端和移动端

运用本书知识点,带领读者完成了中文手写字识别模型训练。完成模型训练后最重要的事情是投入平台使用,本书介绍了将模型移植到服务器端、Android端和iOS端的详细操作,基本涵盖所有的实际部署平台。

本书内容及体系结构

本书分为4篇,共13章内容,包括TensorFlow基础篇、卷积神经网络篇、TensorFlow进阶篇及卷积神经网络实战篇。

第1章 绪论

人工智能在自然语言处理和计算机视觉等领域中,都取得了重大突破。本章介绍人工智能发展史和TensorFlow等的安装。

第2章 TensorFlow基础入门

本章涵盖了TensorFlow框架的数值计算的基本使用方法,主要包括TensorFlow中的图的概念,TensorFlow中的Tensor对象,TensorFlow中的常量与变量,TensorFlow中的流程控制,TensorFlow中的位运算及TensorFlow中的字符串处理等基础主题。

第3章 高维Tensor对象的工具函数

对于一维、二维和三维数组我们比较容易理解,但是一旦数据的维度上升到四维甚至更高维度时,往往比较抽象。在本章中,我们学习高维Tensor对象常用的操作函数。

第4章 前馈网络

前馈网络不需要关心梯度和参数更新问题,只需关心输入、输出和当前节点的参数。相比反向传播,前馈网络(也称为前向网络)更容易理解。本章我们介绍前馈网络计算的各个常见网络层原理,以及使用TensorFlow框架实现各个层的方法,并且同时使用Python代码实现。

第5章 常见网络

近年来,卷积神经网络经历了高速发展。相关研究人员开发了一些拥有高效、快速及易收敛等特性的卷积神经网络结构,如MobileNet、ResNet、DenseNet等。本章就来学习这些常用的网络结构,以及这些网络的优势与运用。

第6章 TensorFlow数据存取

本章学习数据的存取方法,包括训练集数据和模型数据的存取。

第7章 TensorFlow数据预处理

在读取图片数据后,通过对图片做随机光线变化、随机裁剪、随机旋转等预处理操作可以扩充训练集。本章学习使用TensorFlow框架中的图像处理函数,以及在TensorFlow框架中调用OpenCV接口的方法。

第8章 TensorFlow模型训练

使用TensorFlow模型训练需要掌握一些常见功能的实现,本章主要介绍在模型训练过程中需要掌握的内容。

第9章 TensorBoard可视化工具

在模型训练过程中,可以借助TensorBoard可视化工具对误差值loss的变化曲线、学习率变化曲线、参数变量变化及图像中间结果等实现可视化监控。本章就来介绍在卷积神经网络中常用的TensorBoard内置功能。

第10章 中文手写字识别

本章以中文手写字识别项目来综合使用前面章节的内容。中文手写字识别也可以看成一个分类问题,即识别出输入图像所属的分类,每一种分类对应一个汉字。

第11章 移植模型到TensorFlow Serving端

本章学习将训练保存的模型转为服务器端可执行的模型,在服务器端部署模型及其代码实现,并且提供一个HTTP服务接口,实现手写字识别。

第12章 移植TensorFlow模型到Android端

本章分别介绍使用TensorFlow Mobile和TensorFlow Lite库将TensorFlow 模型移植到Android端的方法。

第13章 移植TensorFlow模型到iOS端

本章介绍将TensorFlow模型转为CoreML模型,并部署到iOS端使用的方法。

本书读者对象

Python程序员。

卷积神经网络爱好者。

TensorFlow编程人员。

人工智能开发人员。

机器学习相关人员。


目录

目录


第一篇 TensorFlow基础篇
第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
第二篇 卷积神经网络篇
第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进阶篇
第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
第四篇 卷积神经网络实战篇
第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