本书以Python语言和Tensorflow为工具,由浅入深地讲述了深度学习程序设计的基本原理、算法和思考问题的方法,内容包括自顶向下的程序设计、递归程序设计、面向对象的程序设计、反向传播算法、三层神经网络、卷积神经网络、循环神经网络、生成式对抗网络和目标检测等。本书重在研究代码背后深刻的计算机理论和数学原理,试图说明代码是对理论和思想的实现手段,而不是目的。学以致用是本书的宗旨,提高读者编程水平和动手能力是本书的目的。本书通过大量有趣的实例,说明了理论对深度学习程序设计实践的指导意义。
序
前言
第1 章 程序设计方法...00
1.1 自顶向下的程序设计...00
1.1.1 问题分解和自顶向下的程序设计方法...00
1.1.2 五猴分桃问题...00
1.1.3 猜姓氏问题...00
1.1.4 囚犯问题...00
1.1.5 扑克牌问题...0
1.2 递归程序设计...0
1.2.1 河内塔问题...0
1.2.2 兔子问题...0
1.2.3 字符串匹配问题...0
1.2.4 组合问题...0
1.2.5 人字形铁路问题...0
1.3 面向对象的程序设计...0
1.3.1 方法重定义和分数...0
1.3.2 二十四点问题...0
1.4 结束语...0
第2 章 反向传播算法...0
2.1 导数和导数的应用...0
2.1.1 导数...0
2.1.2 梯度下降法求函数的最小值...0
2.1.3 牛顿法求平方根...0
2.1.4 复合函数和链式法则...0
2.1.5 多元函数和全微分方程...0
2.1.6 反向传播算法...0
2.1.7 梯度...0
2.1.8 分段求导...0
2.2 自动求导和人工智能框架...0
2.2.1 表达式和自动求偏导...0
2.2.2 表达式求值...0
2.2.3 求解任意方程...0
2.2.4 求解任意方程组...0
2.2.5 求解任意函数的极小值...0
2.2.6 张量、计算图和人工智能框架...0
2.3 结束语...0
第3 章 神经元网络初步...0
3.1 Tensorflow基本概念...0
3.1.1 计算图、张量、常数和变量...0
3.1.2 会话、运行...0
3.1.3 占位符...0
3.1.4 矩阵算术运算...0
3.1.5 矩阵运算的广播...0
3.1.6 TF矩阵运算...0
3.1.7 形状和操作...0
3.1.8 关系运算和逻辑运算...0
3.2 优化器和计算图...0
3.2.1 梯度和优化器...0
3.2.2 求解平方根...0
3.2.3 计算图...0
3.3 三层神经网络...0
3.3.1 神经元网络训练算法...0
3.3.2 线性变换和激活函数...0
3.3.3 矩阵乘法和全连接...0
3.3.4 激活函数...0
3.3.5 全连接和Relu的梯度...0
3.3.6 求正弦...0
3.3.7 BGD、SGD和MBGD...0
3.3.8 三层神经网络模型...0
3.4 用三层神经网络拟合任意一个函数...0
3.4.1 三层神经网络拟合一元函数...0
3.4.2 样本、训练和预测...0
3.4.3 中间层神经元个数和样本数量之间
的关系...0
3.4.4 自变量越界会发生什么...0
3.4.5 同时拟合cos(x)、sin(x)...0
3.4.6 拟合多元函数...0
3.4.7 过拟合...0
3.5 手写数字识别...0
3.5.1 手写数字样本集合MNIST...0
3.5.2 独热向量...0
3.5.3 3种损失函数...0
3.5.4 softmax函数...0
3.5.5 保存和恢复模型...0
3.5.6 验证模型...0
3.5.7 测试和使用模型...0
3.6 结束语...0
第4 章 卷积神经网络...0
4.1 卷积...0
4.1.1 一维卷积...0
4.1.2 二维卷积...
4.1.3 通道...
4.1.4 TF对卷积的第一种实现...
4.1.5 TF对卷积的第二种实现...
4.1.6 卷积的实质...
4.2 池化操作...
4.2.1 最大值池化和平均值池化...
4.2.2 池化操作的梯度...
4.3 用CNN实现手写数字识别...
4.3.1 模型的结构...
4.3.2 模型参数数量和计算量...
4.3.3 关于全连接和Dropout...
4.3.4 用Tensorboard监视训练...
4.4 手写数字生成...
4.4.1 生成问题...
4.4.2 VAE模型和语义...
4.4.3 反卷积操作...
4.4.4 网络的结构...
4.4.5 动量...
4.4.6 控制依赖...
4.4.7 预测...
4.5 条件VAE模型...
4.5.1 CVAE模型...
4.5.2 条件式手写数字生成模型...
4.6 使用GPU...
4.6.1 单GPU和nvidia-smi命令...
4.6.2 多GPU和重名问题...
4.6.3 多GPU的梯度...
4.6.4 多GPU训练...
4.6.5 多GPU预测...
4.7 残差神经网络...
4.7.1 残差神经网络的实现...
4.7.2 BN操作...
4.8 表情识别...
4.8.1 样本...
4.8.2 通用超级框架...
4.8.3 模型...
4.9 人脸识别和人脸对比...
4.9.1 人脸识别...
4.9.2 简单人脸对比...
4.9.3 简单人脸对比的实现...
4.9.4 法向量和夹角余弦...
4.9.5 基于夹角余弦的人脸对比...
4.10 语义分割和实例分割...
4.10.1 什么是语义分割和实例分割...
4.10.2 多分类问题...
4.10.3 U型网络...
4.10.4 语义分割和实例分割的实现...
4.10.5 点到点的语义分割和实例分割...
4.11 其他CNN模型...
4.12 优化器...
4.12.1 GradientDescentOptimizer...
4.12.2 MomentumOptimizer...
4.12.3 RMSPropOptimizer...
4.12.4 AdamOptimizer...
4.12.5 AdagradOptimizer...
4.12.6 AdadeltaOptimizer...
4.13 结束语...
第5 章 循环神经网络...
5.1 什么是循环神经网络...
5.2 RNN的结构...
5.2.1 简单RNN模型...
5.2.2 多层RNN...
5.3 诗歌生成器...
5.3.1 样本预处理...
5.3.2 字向量...
5.3.3 可洗牌的DataSet...
5.3.4 生成诗歌...
5.4 LSTM模型...
5.4.1 基本LSTM模型...
5.4.2 LSTM变体之一——Peephole...
5.4.3 LSTM变体之二——GRU...
5.5 1:1模型...
5.5.1 分词和词性标注...
5.5.2 双向RNN...
5.6 N∶1模型与1∶N模型...
5.6.1 N∶1模型...
5.6.2 1∶N模型...
5.7 N∶N模型...
5.7.1 翻译...
5.7.2 自注意力...
5.7.3 独立计算的自注意力...
5.7.4 Transform(变形)操作...
5.7.5 Transformer多头注意力模型...
5.8 N∶N∶N模型...
5.8.1 阅读理解...
5.8.2 多轮对话...
5.9 结束语...
第6 章 生成式对抗网络...
6.1 简单GAN...
6.1.1 简单GAN模型...
6.1.2 简单GAN生成手写数字...
6.1.3 GAN的训练为什么困难...
6.2 条件式GAN...
6.3 Pix2Pix模型...
6.4 CycleGAN模型...
6.5 StarGAN模型...
6.5.1 StarGAN的训练...
6.5.2 数字之间的转换...
6.6 WGAN...
6.7 结束语...
第7 章 目标检测...
7.1 目标检测简介...
7.2 目标检测中的难点...
7.2.1 模型的输出...
7.2.2 目标检测的主要方法...
7.3 两步检测法...
7.3.1 RCNN模型...
7.3.2 Fast RCNN模型...
7.3.3 Faster RCNN模型...
7.4 一步检测法...
7.4.1 SSD模型...
7.4.2 Yolo模型...
7.5 结束语...
索引...