内容简介
本书从基础知识开始,介绍深度学神经网络相关的一系列技术与实现方法,主要内括PyTorch的使用、神经网络的原理、神经网络的基础模型、图神经网络的基础模型。书中侧重讲述与深度学相关的网络模型和算法思想,以及图神经网络的原理,且针对这些知识点给出在PyTorch框架上的实现代码。
本书适合想学经网络的技术人员、人工智能从业人员阅读,也适合作为大专院校相关专业的师生用书和培训班的教材。
目录
第 一篇 入门——PyTorch基础第 1章 快速了解人工智能与PyTorch 31.1 图神经网络与深度学1.1.1 深度神经网络 41.1.2 图神经网络 41.2 PyTorch是做什么的 41.3 PyTorch的特点 51.4 PyTorch与TensorFlow各有所长 61.5 如何使用本书学好深度学第 2章 搭建开发环境 92.1 下载及安装Anaconda 102.1.1 下载Anaconda开发工具 102.1.2 安装Anaconda开发工具 102.1.3 安装Anaconda开发工具时的注意事项 112.2 安装PyTorch 112.2.1 打开PyTorch官网 122.2.2 配置PyTorch安装命令 122.2.3 使用配置好的命令安装PyTorch 122.2.4 配置PyTorch的镜像源 132.3 熟悉Anaconda 3的开发工具 152.3.1 快速了解Spyder 152.3.2 快速了解Jupyter Notebook 172.4 测试开发环境 18第3章 PyTorch基本开发步骤——用逻辑回归拟合二维数据 193.1 实例1:从一组看似混乱的数据中找出规律 203.1.1 准备数据 203.1.2 定义网络模型 213.1.3 搭建网络模型 223.1.4 训练模型 233.1.5 可视化训练结果 233.1.6 使用及评估模型 243.1.7 可视化模型 253.2 模型是如何训练出来的 263.2.1 模型里的内容及意义 263.2.2 模型内部数据流向 273.3结 27第4章 快速上手PyTorch 294.1 神经网络中的几个基本数据类型 304.2 张量类的基础 304.2.1 定义张量的方法 304.2.2 张量的类型 324.2.3 张量的type()方法 334.3 张量与NumPy 344.3.1 张量与NumPy类型数据的相互转换 344.3.2 张量与NumPy各自的形状获取 344.3.3 张量与NumPy各自的切片操作 344.3.4 张量与NumPy类型数据相互转换间的陷阱 354.4 在CPU和GPU控制的内存中定义张量 364.4.1 将CPU内存中的张量转化到GPU内存中 364.4.2 直接在GPU内存中定义张量 364.4.3 使用to()方法来指定设备 364.4.4 使用环境变量CUDA_VISIBLE_DEVICES来指定设备 364.5 生成值张量 374.5.1 设置值种子 374.5.2 按照指定形状生成值 374.5.3 生成线空间的值 374.5.4 生成对数空间的值 384.5.5 生成未初始化的矩阵 384.5.6 更多的值生成函数 384.6 张量间的数算 384.6.1 PyTorch的运算函数 394.6.2 PyTorch的自变化运算函数 394.7 张量间的数据操作 394.7.1 用torch.reshape()函数实现数据维度变换 394.7.2 实现张量数据的矩阵转置 404.7.3 view()方法与contiguous()方法 404.7.4 用torch.cat()函数实现数据连接 414.7.5 用torch.chunk()函数实现数据均匀分割 414.7.6 用torch.split()函数实现数据不均匀分割 424.7.7 用torch.gather()函数对张量数行检索 424.7.8 按照指定阈值对张行过滤 424.7.9 找出张量中的非零值索引 434.7.10 根据条行多张量取值 434.7.11 根据阈行数据截断 434.7.12 获取数据中大值、小值的索引 434.8 Variable类型与自动微分模块 444.8.1 自动微分模块简介 444.8.2 Variable对象与张量对象之间的转化 444.8.3 用no_grad()与enable_grad()控制梯度计算 454.8.4 函数torch.no_grad()介绍 454.8.5 函数enable_grad()与no_grad()的嵌套 464.8.6 用set_grad_enabled()函数统一管理梯度计算 474.8.7 Variable对象的grad_fn属 474.8.8 Variable对象的is_leaf属 484.8.9 用backward()方法自动求导 484.8.10 自动求导的作用 494.8.11 用detach()方法将Variable对象分离成叶子节点 494.8.12 volatile属扩展 504.9 定义模型结构的步骤与方法 504.9.1 代码实现: Module类的使用方法 504.9.2 模型中的参数Parameters类 524.9.3 为模型添加参数 534.9.4 从模型中获取参数 534.9.5 保存与载入模型 564.9.6 模型结构中的钩子函数 574.10 模型的网络层 58第5章 神经网络的基本原理与实现 595.1 了解深度学神经网络与神经元 605.1.1 了解单个神经元 605.1.2 生物神经元与计算机神经元模型的结构相似 625.1.3 生物神经元与计算机神经元模型的工作流程相似 635.1.4 神经网络的形成 635.2 深度学基础神经网络模型 635.3 什么是全连接神经网络 645.3.1 全连接神经网络的结构 645.3.2 实例2:分析全连接神经网络中每个神经元的作用 645.3.3 全连接神经网络的拟合原理 665.3.4 全连接神经网络的设计思想 675.4 激活函数——加入非线因素,弥补线模型缺陷 685.4.1 Sigmoid函数 685.4.2 tanh函数 695.4.3 ReLU函数 705.4.4 激活函数的多种形式 725.4.5 扩展1:更好的激活函数(Swish与Mish) 735.4.6 扩展2:更适合NLP任务的激活函数(GELU) 745.5 激活函结 755.6 训练模型的步骤与方法 765.7 神经网络模块(nn)中的损失函数 765.7.1 L1损失函数 765.7.2 均方差(MSE)损失函数 775.7.3 交叉熵损失(CrossEntropyLoss)函数 775.7.4 其他的损失函数 785.7.5结:损失算法的选取 795.8 Softmax算法——处理分类问题 795.8.1 什么是Softmax 805.8.2 Softmax原理 805.8.3 常用的Softmax接口 805.8.4 实例3:Softmax与交叉熵的应用 815.8.5结:更好地认识Softmax 825.9 优化器模块 825.9.1 了解反向传播与BP算法 825.9.2 优化器与梯度下降 835.9.3 优化器的类别 835.9.4 优化器的使用方法 835.9.5 查看优化器的参数结构 845.9.6 常用的优化器——Adam 855.9.7 更好的优化器——Ranger 855.9.8 如何选取优化器 855.10 退化学—在训练的速度与精度之间找衡 865.10.1 设置学方法——退化学865.10.2 退化学口(lr_scheduler) 875.10.3 使用lr_scheduler接口实现多种退化学885.11 实例4:预测泰坦尼克号船上的生存乘客 915.11.1 载入样本 915.11.2 样本的特征分析——离散数据与连续数据 925.11.3 处理样本中的离散数据和Nan值 935.11.4 分离样本和标签并制作成数据集 955.11.5 定义Mish激活函数与多层全连接网络 965.11.6 训练模型并输出结果 97篇 基础——神经督训练与无监督训练第6章 实例5:识别黑白图中的服装图案 1016.1 熟悉样本:了解Fashion-MNIST数据集 1026.1.1 Fashion-MNIST的起源 1026.1.2 Fashion-MNIST的结构 1026.1.3 手动下载Fashion-MNIST数据集 1036.1.4 代码实现:自动下载Fashion-MNIST数据集 1036.1.5 代码实现:读取及显示Fashion-MNIST中的数据 1046.2 制作批次数据集 1056.2.1 数据集封装类DataLoader 1056.2.2 代码实现:按批次封装Fashion-MNIST数据集 1066.2.3 代码实现:读取批次数据集 1076.3 构建并训练模型 1086.3.1 代码实现:定义模型类 1086.3.2 代码实现:定义损失的计算方法及优化器 1106.3.3 代码实现:训练模型 1106.3.4 代码实现:保存模型 1116.4 加载模型,并用行预测 1116.5 评估模型 1126.6 扩展:多显卡并行训练 1136.6.1 代码实现:多显卡训练 1136.6.2 多显卡训练过程中,保存与读取模型文件的注意事项 1156.6.3 在切换设备环境时,保存与读取模型文件的注意事项 1166.6.4 处理显存残留问题 116第7章 监督学神经网络 1197.1 从视觉的角度理解卷积神经网络 1207.1.1 生物视觉系统原理 1207.1.2 微积分 1207.1.3 离散微分与离散积分 1207.1.4 视觉神经网络中的离散积分 1217.2 卷积神经网络的结构 1217.2.1 卷积神经网络的工作过程 1227.2.2 卷积神经网络与全连接网络的区别 1237.2.3 了解1D卷积、2D卷积和3D卷积 1237.2.4 实例分析:Sobel算子的原理 1237.2.5 深层神经网络中的卷积核 1267.2.6 理解卷积的数学意义——卷积分 1267.3 卷积神经网络的实现 1277.3.1 了解卷积接口 1277.3.2 卷积操作的类型 1297.3.3 卷积参数与卷积结果的计算规则 1307.3.4 实例6:卷积函数的使用 1307.3.5 实例7:使用卷积提取图片的轮廓 1357.4 深层卷积神经网络 1387.4.1 深层卷积神经网络组成 1387.4.2 池化操作 1407.4.3 了解池化接口 1407.4.4 实例8:池化函数的使用 1417.4.5 实例9:搭建卷积神经网络 1437.5 循环神经网络结构 1457.5.1 了解人的记忆原理 1457.5.2 循环神经网络的应用领域 1467.5.3 循环神经网络的正向传播过程 1477.5.4 BP算法与BPTT算法的原理 1487.5.5 实例10:简单循环神经网络实现——设计一个退位减法器 1497.6 常见的循环神经网络单元及结构 1547.6.1 长短记忆(LSTM)单元 1557.6.2 门控循环单元(GRU) 1577.6.3 只有忘记门的LSTM(JANET)单元 1587.6.4 独立循环(IndRNN)单元 1587.6.5 双向RNN结构 1597.7 实例11:用循环神经网络训练语言模型 1607.7.1 什么是语言模型 1617.7.2 词表与词向量 1617.7.3 词向量的原理与实现 1617.7.4 NLP中多项式分布 1627.7.5 循环神经网络的实现 1637.7.6 实现语言模型的思路与步骤 1647.7.7 代码实现:准备样本 1657.7.8 代码实现:构建循环神经网络(RNN)模型 1677.7.9 代码实现:实例化模型类,并训练模型 1687.7.10 代码实现:运行模型生成句子 1717.8 过拟合问题及优化技巧 1727.8.1 实例12:训练具有过拟合问题的模型 1727.8.2 改善模型过拟合的方法 1757.8.3 了解正则化 1757.8.4 实例13:用L2正则改善模型的过拟合状况 1767.8.5 实例14:通过增大数据集改善模型的过拟合状况 1787.8.6 Dropout方法 1797.8.7 实例15: 通过Dropout方法改善模型的过拟合状况 1807.8.8 全连接网络的深浅与泛化能力的联系 1827.8.9 了解批量归一化(BN)算法 1827.8.10 实例16: 手动实现批量归一化的计算方法 1857.8.11 实例17: 通过批量归一化方法改善模型的过拟合状况 1877.8.12 使用批量归一化方法时的注意 事项 1887.8.13 扩展:多种批量归一化算法介绍 1887.9 神经网络中的注意力机制 1897.9.1 注意力机制的实现 1897.9.2 注意力机制的软、硬模式 1907.9.3 注意力机制模型的原理 1907.9.4 多头注意力机制 1917.9.5 自注意力机制 1927.10 实例18:利用注意力循环神经网络对图片分类 1927.10.1 循环神经网络处理图片分类任务的原理 1927.10.2 代码实现:搭建LSTM网络模型 1937.10.3 代码实现:构建注意力机制类 1937.10.4 代码实现:构建输入数据并训练模型 1967.10.5 使用并评估模型 1977.10.6 扩展1:使用梯度剪辑技巧优化训练过程 1977.10.7 扩展2:使用JANET单元完成RNN 1987.10.8 扩展3:使用IndRNN单元实现RNN 198
第8章 无监督学神经网络 1998.1 快速了解信息熵 2008.2 通用的无监督模型——自编码神经网络与对抗神经网络 2058.3 自编码神经网络 2068.4 实例19:用变分自编码神经网络模型生成模拟数据 2088.5 实例20:用条件变分自编码神经网络生成可控模拟数据 2168.6 对抗神经网络 2198.7 实例21:用WGAN-gp模型生成模拟数据 2268.8 实例22:用条件GAN生成可控模拟数据 2398.9 实例23:实现带有W散度的GAN——WGAN-div模型 2418.10 散度在神经网络中的应用 2438.11 实例25:用大化深度互信息模型执行图片搜索器 253第9章 快速了解图神经网络——少量样本也可以训练模型 2699.1 图神经网络的相关基础知识 2709.2 矩阵的基础 2729.3 邻接矩阵的几种操作 2759.4 实例26:用图卷积神经网络为论文分类 2789.5 图卷积神经网络 2909.6 扩展实例:用Multi-sample Dropout优化模型的训练速度 2919.7 从图神经网络的视角看待深度学949.8 图神经网络使用拉普拉斯矩阵的原因 295第 10章 基于空间域的图神经网络实现 29710.1 重新认识图卷积神经网络 29810.2 实例27:用图注意力神经网络为论文分类 30010.3 图神经网络常用库——DGL库 30510.4 DGLGraph图的基本操作 30810.5 实例28:用带有残差结构的多层GAT模型实现论文分类 31810.6 图卷积模型的缺陷 32710.7 实例29:用简化图卷积模型实现论文分类 32910.8 实例30:用图滤波神经网络模型实现论文分类 33410.9 实例31:用深度图互信息模型实现论文分类 33710.10 实例32:用图同构网络模型实现论文分类 34410.11 实例33:用APPNP模型实现论文分类 34710.12 实例34:用JKNet模型实现论文分类 35110.13结 355