深度学习入门之PyTorch出版时间:2017丛编项: 博文视点AI系列内容简介 深度学习如今已经成为了科技领域*炙手可热的技术,在本书中,我们将帮助你入门深度学习的领域。本书将从人工智能的介绍入手,了解机器学习和深度学习的基础理论,并学习如何用PyTorch框架对模型进行搭建。通过阅读本书,你将会学习到机器学习中的线性回归和logistic回归,深度学习的优化方法,多层全连接神经网络,卷积神经网络,循环神经网络以及生成对抗网络,同时从零开始对PyTorch进行学习,了解PyTorch基础及如何用其进行模型的搭建,*后通过实战了解*前沿的研究成果和PyTorch在实际项目中的应用。目录第1 章深度学习介绍11.1 人工智能. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 数据挖掘、机器学习与深度学习. . . . . . . . . . . . . . . . . . . . . . . 21.2.1 数据挖掘. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2.2 机器学习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2.3 深度学习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3 学习资源与建议. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8第2 章深度学习框架112.1 深度学习框架介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.2 PyTorch 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.2.1 什么是PyTorch . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.2.2 为何要使用PyTorch . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3 配置PyTorch 深度学习环境. . . . . . . . . . . . . . . . . . . . . . . . . . 152.3.1 操作系统的选择. . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3.2 Python 开发环境的安装. . . . . . . . . . . . . . . . . . . . . . . . 162.3.3 PyTorch 的安装. . . . . . . . . . . . . . . . . . . . . . . . . . . . 18第3 章多层全连接神经网络243.1 热身:PyTorch 基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.1.1 Tensor(张量) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.1.2 Variable(变量) . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.1.3 Dataset(数据集) . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.1.4 nn.Module(模组) . . . . . . . . . . . . . . . . . . . . . . . . . . 293.1.5 torch.optim(优化) . . . . . . . . . . . . . . . . . . . . . . . . . . 303.1.6 模型的保存和加载. . . . . . . . . . . . . . . . . . . . . . . . . . 313.2 线性模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.2.1 问题介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.2.2 一维线性回归. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.2.3 多维线性回归. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.2.4 一维线性回归的代码实现. . . . . . . . . . . . . . . . . . . . . . 353.2.5 多项式回归. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383.3 分类问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.3.1 问题介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.3.2 Logistic 起源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.3.3 Logistic 分布. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.3.4 二分类的Logistic 回归. . . . . . . . . . . . . . . . . . . . . . . . 433.3.5 模型的参数估计. . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.3.6 Logistic 回归的代码实现. . . . . . . . . . . . . . . . . . . . . . . 453.4 简单的多层全连接前向网络. . . . . . . . . . . . . . . . . . . . . . . . . 493.4.1 模拟神经元. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493.4.2 单层神经网络的分类器. . . . . . . . . . . . . . . . . . . . . . . . 503.4.3 激活函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513.4.4 神经网络的结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . 543.4.5 模型的表示能力与容量. . . . . . . . . . . . . . . . . . . . . . . . 553.5 深度学习的基石:反向传播算法. . . . . . . . . . . . . . . . . . . . . . . 573.5.1 链式法则. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573.5.2 反向传播算法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.5.3 Sigmoid 函数举例. . . . . . . . . . . . . . . . . . . . . . . . . . . 583.6 各种优化算法的变式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593.6.1 梯度下降法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593.6.2 梯度下降法的变式. . . . . . . . . . . . . . . . . . . . . . . . . . 623.7 处理数据和训练模型的技巧. . . . . . . . . . . . . . . . . . . . . . . . . 643.7.1 数据预处理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643.7.2 权重初始化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663.7.3 防止过拟合. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673.8 多层全连接神经网络实现MNIST 手写数字分类. . . . . . . . . . . . . . 693.8.1 简单的三层全连接神经网络. . . . . . . . . . . . . . . . . . . . . 703.8.2 添加激活函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703.8.3 添加批标准化. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.8.4 训练网络. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71第4 章卷积神经网络764.1 主要任务及起源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764.2 卷积神经网络的原理和结构. . . . . . . . . . . . . . . . . . . . . . . . . 774.2.1 卷积层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804.2.2 池化层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844.2.3 全连接层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854.2.4 卷积神经网络的基本形式. . . . . . . . . . . . . . . . . . . . . . 854.3 PyTorch 卷积模块. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874.3.1 卷积层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874.3.2 池化层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884.3.3 提取层结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904.3.4 如何提取参数及自定义初始化. . . . . . . . . . . . . . . . . . . . 914.4 卷积神经网络案例分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . 924.4.1 LeNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934.4.2 AlexNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944.4.3 VGGNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954.4.4 GoogLeNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984.4.5 ResNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004.5 再实现MNIST 手写数字分类. . . . . . . . . . . . . . . . . . . . . . . . . 1034.6 图像增强的方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1054.7 实现cifar10 分类. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107第5 章循环神经网络1115.1 循环神经网络. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115.1.1 问题介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125.1.2 循环神经网络的基本结构. . . . . . . . . . . . . . . . . . . . . . 1125.1.3 存在的问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155.2 循环神经网络的变式:LSTM 与GRU . . . . . . . . . . . . . . . . . . . . 1165.2.1 LSTM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1165.2.2 GRU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195.2.3 收敛性问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1205.3 循环神经网络的PyTorch 实现. . . . . . . . . . . . . . . . . . . . . . . . 1225.3.1 PyTorch 的循环网络模块. . . . . . . . . . . . . . . . . . . . . . . 1225.3.2 实例介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1275.4 自然语言处理的应用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315.4.1 词嵌入. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315.4.2 词嵌入的PyTorch 实现. . . . . . . . . . . . . . . . . . . . . . . . 1335.4.3 N Gram 模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1335.4.4 单词预测的PyTorch 实现. . . . . . . . . . . . . . . . . . . . . . . 1345.4.5 词性判断. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1365.4.6 词性判断的PyTorch 实现. . . . . . . . . . . . . . . . . . . . . . . 1375.5 循环神经网络的更多应用. . . . . . . . . . . . . . . . . . . . . . . . . . . 1405.5.1 Many to one . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1405.5.2 Many to Many(shorter) . . . . . . . . . . . . . . . . . . . . . . . 1415.5.3 Seq2seq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1415.5.4 CNN+RNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142第6 章生成对抗网络1446.1 生成模型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1446.1.1 自动编码器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1456.1.2 变分自动编码器. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1506.2 生成对抗网络. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1536.2.1 何为生成对抗网络. . . . . . . . . . . . . . . . . . . . . . . . . . 1536.2.2 生成对抗网络的数学原理. . . . . . . . . . . . . . . . . . . . . . 1606.3 Improving GAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1646.3.1 Wasserstein GAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1646.3.2 Improving WGAN . . . . . . . . . . . . . . . . . . . . . . . . . . . 1676.4 应用介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1686.4.1 Conditional GAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1686.4.2 Cycle GAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170第7 章深度学习实战1737.1 实例一――猫狗大战:运用预训练卷积神经网络进行特征提取与预测. 1737.1.1 背景介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1747.1.2 原理分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1747.1.3 代码实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1777.1.4 总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1837.2 实例二――Deep Dream:探索卷积神经网络眼中的世界. . . . . . . . . 1837.2.1 原理介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1847.2.2 预备知识:backward . . . . . . . . . . . . . . . . . . . . . . . . . 1857.2.3 代码实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1907.2.4 总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1957.3 实例三――Neural-Style:使用PyTorch 进行风格迁移. . . . . . . . . . . 1967.3.1 背景介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1967.3.2 原理分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1977.3.3 代码实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1997.3.4 总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2057.4 实例四――Seq2seq:通过RNN 实现简单的Neural Machine Translation . 2057.4.1 背景介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2067.4.2 原理分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2067.4.3 代码实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2097.4.4 总结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 上一篇: 解忧程序员:高薪编程、求职面试与成长转型宝典 下一篇: 区块链实战