本书针对TensorFlow 1.0以上版本编写,采用“理论+实践”的形式编写,通过大量的实例(共96个),全面而深入地讲解“深度学习神经网络原理”和“Tensorflow使用方法”两方面。书中的实例具有很强的实用,如对图片分类、制作一个简单的聊天机器人、进行图像识别等。书中的每章都配有一段教学视频,视频和图书具有一样的内容和结构,能帮助读者快速而全面地了解本章的内容。本书还免费提供了所有案例的源代码及数据样本,这些代码和样本不仅方便了读者学习,而且也能为以后的工作提供便利。
全书共分为3篇:第1篇“深度学习与TensorFlow基础”,包括快速了解人工智能与TensorFlow、搭建开发环境、TensorFlow基本开发步骤、TensorFlow编程基础、一个识别图中模糊的数字的案例;第2篇“深度学习基础——神经网络”介绍了神经网络的基础模型,包括单个神经元、多层神经网络、卷积神经网络、循环神经网络、自编码网络;第3篇“神经网络进阶”,是对基础网络模型的灵活运用与自由组合,是对前面知识的综合及拔高,包括深度神经网络、对抗神经网络。
本书结构清晰、案例丰富、通俗易懂、实用性强。特别适合TensorFlow深度学习的初学者和进阶读者作为自学教程阅读。另外,本书也适合社会培训学校作为培训教材使用,还适合大中专院校的相关专业作为教学参考书。
封面图
目录
- 配套学习资源
- 前言
- 第1篇 深度学习与TensorFlow基础
- 第1章 快速了解人工智能与TensorFlow2
- 1.1 什么是深度学习2
- 1.2 TensorFlow是做什么的3
- 1.3 TensorFlow的特点4
- 1.4 其他深度学习框架特点及介绍5
- 1.5 如何通过本书学好深度学习6
- 1.5.1 深度学习怎么学6
- 1.5.2 如何学习本书7
- 第2章 搭建开发环境8
- 2.1 下载及安装Anaconda开发工具8
- 2.2 在Windows平台下载及安装TensorFlow11
- 2.3 GPU版本的安装方法12
- 2.3.1 安装CUDA软件包12
- 2.3.2 安装cuDNN库13
- 2.3.3 测试显卡14
- 2.4 熟悉Anaconda 3开发工具15
- 2.4.1 快速了解Spyder16
- 2.4.2 快速了解Jupyter Notebook18
- 第3章 TensorFlow基本开发步骤——以逻辑回归拟合二维数据为例19
- 3.1 实例1:从一组看似混乱的数据中找出y≈2x的规律19
- 3.1.1 准备数据20
- 3.1.2 搭建模型21
- 3.1.3 迭代训练模型23
- 3.1.4 使用模型25
- 3.2 模型是如何训练出来的25
- 3.2.1 模型里的内容及意义25
- 3.2.2 模型内部的数据流向26
- 3.3 了解TensorFlow开发的基本步骤27
- 3.3.1 定义输入节点的方法27
- 3.3.2 实例2:通过字典类型定义输入节点28
- 3.3.3 实例3:直接定义输入节点28
- 3.3.4 定义“学习参数”的变量29
- 3.3.5 实例4:通过字典类型定义“学习参数”29
- 3.3.6 定义“运算”29
- 3.3.7 优化函数,优化目标30
- 3.3.8 初始化所有变量30
- 3.3.9 迭代更新参数到最优解31
- 3.3.10 测试模型31
- 3.3.11 使用模型31
- 第4章 TensorFlow编程基础32
- 4.1 编程模型32
- 4.1.1 了解模型的运行机制33
- 4.1.2 实例5:编写hello world程序演示session的使用34
- 4.1.3 实例6:演示with session的使用35
- 4.1.4 实例7:演示注入机制35
- 4.1.5 建立session的其他方法36
- 4.1.6 实例8:使用注入机制获取节点36
- 4.1.7 指定GPU运算37
- 4.1.8 设置GPU使用资源37
- 4.1.9 保存和载入模型的方法介绍38
- 4.1.10 实例9:保存/载入线性回归模型38
- 4.1.11 实例10:分析模型内容,演示模型的其他保存方法40
- 4.1.12 检查点(Checkpoint)41
- 4.1.13 实例11:为模型添加保存检查点41
- 4.1.14 实例12:更简便地保存检查点44
- 4.1.15 模型操作常用函数总结45
- 4.1.16 TensorBoard可视化介绍45
- 4.1.17 实例13:线性回归的TensorBoard可视化46
- 4.2 TensorFlow基础类型定义及操作函数介绍48
- 4.2.1 张量及操作49
- 4.2.2 算术运算函数55
- 4.2.3 矩阵相关的运算56
- 4.2.4 复数操作函数58
- 4.2.5 规约计算59
- 4.2.6 分割60
- 4.2.7 序列比较与索引提取61
- 4.2.8 错误类62
- 4.3 共享变量62
- 4.3.1 共享变量用途62
- 4.3.2 使用get-variable获取变量63
- 4.3.3 实例14:演示get_variable和Variable的区别63
- 4.3.4 实例15:在特定的作用域下获取变量65
- 4.3.5 实例16:共享变量功能的实现66
- 4.3.6 实例17:初始化共享变量的作用域67
- 4.3.7 实例18:演示作用域与操作符的受限范围68
- 4.4 实例19:图的基本操作70
- 4.4.1 建立图70
- 4.4.2 获取张量71
- 4.4.3 获取节点操作72
- 4.4.4 获取元素列表73
- 4.4.5 获取对象73
- 4.4.6 练习题74
- 4.5 配置分布式TensorFlow74
- 4.5.1 分布式TensorFlow的角色及原理74
- 4.5.2 分布部署TensorFlow的具体方法75
- 4.5.3 实例20:使用TensorFlow实现分布式部署训练75
- 4.6 动态图(Eager)81
- 4.7 数据集(tf.data)82
- 第5章 识别图中模糊的手写数字(实例21)83
- 5.1 导入图片数据集84
- 5.1.1 MNIST数据集介绍84
- 5.1.2 下载并安装MNIST数据集85
- 5.2 分析图片的特点,定义变量87
- 5.3 构建模型87
- 5.3.1 定义学习参数87
- 5.3.2 定义输出节点88
- 5.3.3 定义反向传播的结构88
- 5.4 训练模型并输出中间状态参数89
- 5.5 测试模型90
- 5.6 保存模型91
- 5.7 读取模型92
- 第2篇 深度学习基础——神经网络
- 第6章 单个神经元96
- 6.1 神经元的拟合原理96
- 6.1.1 正向传播98
- 6.1.2 反向传播98
- 6.2 激活函数——加入非线性因素,解决线性模型缺陷99
- 6.2.1 Sigmoid函数99
- 6.2.2 Tanh函数100
- 6.2.3 ReLU函数101
- 6.2.4 Swish函数103
- 6.2.5 激活函数总结103
- 6.3 softmax算法——处理分类问题103
- 6.3.1 什么是softmax104
- 6.3.2 softmax原理104
- 6.3.3 常用的分类函数105
- 6.4 损失函数——用真实值与预测值的距离来指导模型的收敛方向105
- 6.4.1 损失函数介绍105
- 6.4.2 TensorFlow中常见的loss函数106
- 6.5 softmax算法与损失函数的综合应用108
- 6.5.1 实例22:交叉熵实验108
- 6.5.2 实例23:one_hot实验109
- 6.5.3 实例24:sparse交叉熵的使用110
- 6.5.4 实例25:计算loss值110
- 6.5.5 练习题111
- 6.6 梯度下降——让模型逼近最小偏差111
- 6.6.1 梯度下降的作用及分类111
- 6.6.2 TensorFlow中的梯度下降函数112
- 6.6.3 退化学习率——在训练的速度与精度之间找到平衡113
- 6.6.4 实例26:退化学习率的用法举例114
- 6.7 初始化学习参数115
- 6.8 单个神经元的扩展——Maxout网络116
- 6.8.1 Maxout介绍116
- 6.8.2 实例27:用Maxout网络实现MNIST分类117
- 6.9 练习题118
- 第7章 多层神经网络——解决非线性问题119
- 7.1 线性问题与非线性问题119
- 7.1.1 实例28:用线性单分逻辑回归分析肿瘤是良性还是恶性的119
- 7.1.2 实例29:用线性逻辑回归处理多分类问题123
- 7.1.3 认识非线性问题129
- 7.2 使用隐藏层解决非线性问题130
- 7.2.1 实例30:使用带隐藏层的神经网络拟合异或操作130
- 7.2.2 非线性网络的可视化及其意义133
- 7.2.3 练习题135
- 7.3 实例31:利用全连接网络将图片进行分类136
- 7.4 全连接网络训练中的优化技巧137
- 7.4.1 实例32:利用异或数据集演示过拟合问题138
- 7.4.2 正则化143
- 7.4.3 实例33:通过正则化改善过拟合情况144
- 7.4.4 实例34:通过增大数据集改善过拟合145
- 7.4.5 练习题146
- 7.4.6 dropout——训练过程中,将部分神经单元暂时丢弃146
- 7.4.7 实例35:为异或数据集模型添加dropout147
- 7.4.8 实例36:基于退化学习率dropout技术来拟合异或数据集149
- 7.4.9 全连接网络的深浅关系150
- 7.5 练习题150
- 第8章 卷积神经网络——解决参数太多问题151
- 8.1 全连接网络的局限性151
- 8.2 理解卷积神经网络152
- 8.3 网络结构153
- 8.3.1 网络结构描述153
- 8.3.2 卷积操作155
- 8.3.3 池化层157
- 8.4 卷积神经网络的相关函数158
- 8.4.1 卷积函数tf.nn.conv2d158
- 8.4.2 padding规则介绍159
- 8.4.3 实例37:卷积函数的使用160
- 8.4.4 实例38:使用卷积提取图片的轮廓165
- 8.4.5 池化函数tf.nn.max_pool(avg_pool)167
- 8.4.6 实例39:池化函数的使用167
- 8.5 使用卷积神经网络对图片分类170
- 8.5.1 CIFAR介绍171
- 8.5.2 下载CIFAR数据172
- 8.5.3 实例40:导入并显示CIFAR数据集173
- 8.5.4 实例41:显示CIFAR数据集的原始图片174
- 8.5.5 cifar10_input的其他功能176
- 8.5.6 在TensorFlow中使用queue176
- 8.5.7 实例42:协调器的用法演示178
- 8.5.8 实例43:为session中的队列加上协调器179
- 8.5.9 实例44:建立一个带有全局平均池化层的卷积神经网络180
- 8.5.10 练习题183
- 8.6 反卷积神经网络183
- 8.6.1 反卷积神经网络的应用场景184
- 8.6.2 反卷积原理184
- 8.6.3 实例45:演示反卷积的操作185
- 8.6.4 反池化原理188
- 8.6.5 实例46:演示反池化的操作189
- 8.6.6 实例47:演示gradients基本用法192
- 8.6.7 实例48:使用gradients对多个式子求多变量偏导192
- 8.6.8 实例49:演示梯度停止的实现193
- 8.7 实例50:用反卷积技术复原卷积网络各层图像195
- 8.8 善用函数封装库198
- 8.8.1 实例51:使用函数封装库重写CIFAR卷积网络198
- 8.8.2 练习题201
- 8.9 深度学习的模型训练技巧201
- 8.9.1 实例52:优化卷积核技术的演示201
- 8.9.2 实例53:多通道卷积技术的演示202
- 8.9.3 批量归一化204
- 8.9.4 实例54:为CIFAR图片分类模型添加BN207
- 8.9.5 练习题209
- 第9章 循环神经网络——具有记忆功能的网络210
- 9.1 了解RNN的工作原理210
- 9.1.1 了解人的记忆原理210
- 9.1.2 RNN网络的应用领域212
- 9.1.3 正向传播过程212
- 9.1.4 随时间反向传播213
- 9.2 简单RNN215
- 9.2.1 实例55:简单循环神经网络实现——裸写一个退位减法器215
- 9.2.2 实例56:使用RNN网络拟合回声信号序列220
- 9.3 循环神经网络(RNN)的改进225
- 9.3.1 LSTM网络介绍225
- 9.3.2 窥视孔连接(Peephole)228
- 9.3.3 带有映射输出的STMP230
- 9.3.4 基于梯度剪辑的cell230
- 9.3.5 GRU网络介绍230
- 9.3.6 Bi-RNN网络介绍231
- 9.3.7 基于神经网络的时序类分类CTC232
- 9.4 TensorFlow实战RNN233
- 9.4.1 TensorFlow中的cell类233
- 9.4.2 通过cell类构建RNN234
- 9.4.3 实例57:构建单层LSTM网络对MNIST数据集分类239
- 9.4.4 实例58:构建单层GRU网络对MNIST数据集分类240
- 9.4.5 实例59:创建动态单层RNN网络对MNIST数据集分类240
- 9.4.6 实例60:静态多层LSTM对MNIST数据集分类241
- 9.4.7 实例61:静态多层RNN-LSTM连接GRU对MNIST数据集分类242
- 9.4.8 实例62:动态多层RNN对MNIST数据集分类242
- 9.4.9 练习题243
- 9.4.10 实例63:构建单层动态双向RNN对MNIST数据集分类243
- 9.4.11 实例64:构建单层静态双向RNN对MNIST数据集分类244
- 9.4.12 实例65:构建多层双向RNN对MNIST数据集分类246
- 9.4.13 实例66:构建动态多层双向RNN对MNIST数据集分类247
- 9.4.14 初始化RNN247
- 9.4.15 优化RNN248
- 9.4.16 实例67:在GRUCell中实现LN249
- 9.4.17 CTC网络的loss——ctc_loss251
- 9.4.18 CTCdecoder254
- 9.5 实例68:利用BiRNN实现语音识别255
- 9.5.1 语音识别背景255
- 9.5.2 获取并整理样本256
- 9.5.3 训练模型265
- 9.5.4 练习题272
- 9.6 实例69:利用RNN训练语言模型273
- 9.6.1 准备样本273
- 9.6.2 构建模型275
- 9.7 语言模型的系统学习279
- 9.7.1 统计语言模型279
- 9.7.2 词向量279
- 9.7.3 word2vec281
- 9.7.4 实例70:用CBOW模型训练自己的word2vec283
- 9.7.5 实例71:使用指定侯选采样本训练word2vec293
- 9.7.6 练习题296
- 9.8 处理Seq2Seq任务296
- 9.8.1 Seq2Seq任务介绍296
- 9.8.2 Encoder-Decoder框架297
- 9.8.3 实例72:使用basic_rnn_seq2seq拟合曲线298
- 9.8.4 实例73:预测当天的股票价格306
- 9.8.5 基于注意力的Seq2Seq310
- 9.8.6 实例74:基于Seq2Seq注意力模型实现中英文机器翻译313
- 9.9 实例75:制作一个简单的聊天机器人339
- 9.9.1 构建项目框架340
- 9.9.2 准备聊天样本340
- 9.9.3 预处理样本340
- 9.9.4 训练样本341
- 9.9.5 测试模型342
- 9.10 时间序列的高级接口TFTS344
- 第10章 自编码网络——能够自学习样本特征的网络346
- 10.1 自编码网络介绍及应用346
- 10.2 最简单的自编码网络347
- 10.3 自编码网络的代码实现347
- 10.3.1 实例76:提取图片的特征,并利用特征还原图片347
- 10.3.2 线性解码器351
- 10.3.3 实例77:提取图片的二维特征,并利用二维特征还原图片351
- 10.3.4 实例78:实现卷积网络的自编码356
- 10.3.5 练习题358
- 10.4 去噪自编码359
- 10.5 去噪自编码网络的代码实现359
- 10.5.1 实例79:使用去噪自编码网络提取MNIST特征359
- 10.5.2 练习题363
- 10.6 栈式自编码364
- 10.6.1 栈式自编码介绍364
- 10.6.2 栈式自编码在深度学习中的意义365
- 10.7 深度学习中自编码的常用方法366
- 10.7.1 代替和级联366
- 10.7.2 自编码的应用场景366
- 10.8 去噪自编码与栈式自编码的综合实现366
- 10.8.1 实例80:实现去噪自编码367
- 10.8.2 实例81:添加模型存储支持分布训练375
- 10.8.3 小心分布训练中的“坑”376
- 10.8.4 练习题377
- 10.9 变分自编码377
- 10.9.1 什么是变分自编码377
- 10.9.2 实例82:使用变分自编码模拟生成MNIST数据377
- 10.9.3 练习题384
- 10.10 条件变分自编码385
- 10.10.1 什么是条件变分自编码385
- 10.10.2 实例83:使用标签指导变分自编码网络生成MNIST数据385
- 第3篇 深度学习进阶
- 第11章 深度神经网络392
- 11.1 深度神经网络介绍392
- 11.1.1 深度神经网络起源392
- 11.1.2 经典模型的特点介绍393
- 11.2 GoogLeNet模型介绍394
- 11.2.1 MLP卷积层394
- 11.2.2 全局均值池化395
- 11.2.3 Inception 原始模型396
- 11.2.4 Inception v1模型396
- 11.2.5 Inception v2模型397
- 11.2.6 Inception v3模型397
- 11.2.7 Inception v4模型399
- 11.3 残差网络(ResNet)399
- 11.3.1 残差网络结构399
- 11.3.2 残差网络原理400
- 11.4 Inception-ResNet-v2结构400
- 11.5 TensorFlow中的图片分类模型库——slim400
- 11.5.1 获取models中的slim模块代码401
- 11.5.2 models中的Slim目录结构401
- 11.5.3 slim中的数据集处理403
- 11.5.4 实例84:利用slim读取TFRecord中的数据405
- 11.5.5 在slim中训练模型407
- 11.6 使用slim中的深度网络模型进行图像的识别与检测410
- 11.6.1 实例85:调用Inception_ResNet_v2模型进行图像识别410
- 11.6.2 实例86:调用VGG模型进行图像检测413
- 11.7 实物检测模型库——Object Detection API417
- 11.7.1 准备工作418
- 11.7.2 实例87:调用Object Detection API进行实物检测421
- 11.8 实物检测领域的相关模型425
- 11.8.1 RCNN基于卷积神经网络特征的区域方法426
- 11.8.2 SPP-Net:基于空间金字塔池化的优化RCNN方法426
- 11.8.3 Fast-R-CNN快速的RCNN模型426
- 11.8.4 YOLO:能够一次性预测多个位置和类别的模型427
- 11.8.5 SSD:比YOLO更快更准的模型428
- 11.8.6 YOLO2:YOLO的升级版模型428
- 11.9 机器自己设计的模型(NASNet)428
- 第12章 对抗神经网络(GAN)430
- 12.1 GAN的理论知识430
- 12.1.1 生成式模型的应用431
- 12.1.2 GAN的训练方法431
- 12.2 DCGAN——基于深度卷积的GAN432
- 12.3 InfoGAN和ACGAN:指定类别生成模拟样本的GAN432
- 12.3.1 InfoGAN:带有隐含信息的GAN432
- 12.3.2 AC-GAN:带有辅助分类信息的GAN433
- 12.3.3 实例88:构建InfoGAN生成MNIST模拟数据434
- 12.3.4 练习题440
- 12.4 AEGAN:基于自编码器的GAN441
- 12.4.1 AEGAN原理及用途介绍441
- 12.4.2 实例89:使用AEGAN对MNIST数据集压缩特征及重建442
- 12.5 WGAN-GP:更容易训练的GAN447
- 12.5.1 WGAN:基于推土机距离原理的GAN448
- 12.5.2 WGAN-GP:带梯度惩罚项的WGAN449
- 12.5.3 实例90:构建WGAN-GP生成MNIST数据集451
- 12.5.4 练习题455
- 12.6 LSGAN(最小乘二GAN):具有WGAN 同样效果的GAN455
- 12.6.1 LSGAN介绍455
- 12.6.2 实例91:构建LSGAN生成MNIST模拟数据456
- 12.7 GAN-cls:具有匹配感知的判别器457
- 12.7.1 GAN-cls的具体实现458
- 12.7.2 实例92:使用GAN-cls技术实现生成标签匹配的模拟数据458
- 12.8 SRGAN——适用于超分辨率重建的GAN461
- 12.8.1 超分辨率技术461
- 12.8.2 实例93:ESPCN实现MNIST数据集的超分辨率重建463
- 12.8.3 实例94:ESPCN实现flowers数据集的超分辨率重建466
- 12.8.4 实例95:使用残差网络的ESPCN472
- 12.8.5 SRGAN的原理477
- 12.8.6 实例96:使用SRGAN实现flowers数据集的超分辨率修复477
- 12.9 GAN网络的高级接口TFGAN485
- 12.10 总结486