内容简介
本书通过深度学,从可解释角度出发,阐述深度学理,并将图神经网络与深度学,介绍图神经网络的实现技术。本书分为6章,主要内括:图片分类模型、机器视觉的应用、自然语言处理的相关应用、神经网络的可解释、识别未知分类的方法——零次学构图神经网络。本书中的实例是在PyTorch框架上完成的,具有较高的实用价值。
本书适合人工智能从业者、程序阶学适合作为大专院校相关专业师生的教学和学,以及培训学校的教材。
目录
第 1章 图片分类模型 1
1.1 深度神经网络起源 2
1.2 Inception系列模型 2
1.2.1 多分支结构 2
1.2.2 全局均值池化 3
1.2.3 Inception V1模型 3
1.2.4 Inception V2模型 4
1.2.5 Inception V3模型 5
1.2.6 Inception V4模型 6
1.2.7 Inception-ResNet V2模型 6
1.3 ResNet模型 6
1.3.1 残差连接的结构 7
1.3.2 残差连接的原理 8
1.4 DenseNet模型 8
1.4.1 DenseNet模型的网络结构 8
1.4.2 DenseNet模型的特点 9
1.4.3 稠密块 9
1.5 PNASNet模型 9
1.5.1 组卷积 10
1.5.2 深度可分离卷积 11
1.5.3 空洞卷积 12
1.6 EfficientNet模型 14
1.6.1 MBConv卷积块 15
1.6.2 DropConnect层 16
1.7 实例:使用预训练模型识别图片内容 16
1.7.1 了解torchvision库中的预训练模型 16
1.7.2 代码实现:下载并加载预训练模型 17
1.7.3 代码实现:加载标签并对输入数行预处理 18
1.7.4 代码实现:使用模行预测 19
1.7.5 代码实现:预测结果可视化 20
1.8 实例:使用迁移学多种鸟类 21
1.8.1 什么是迁移学1
1.8.2 样本介绍:鸟类数据集CUB-200 22
1.8.3 代码实现:用torch.utils.data接口封装数据集 22
1.8.4 代码实现:获取并改造ResNet模型 27
1.8.5 代码实现:微调模型后一层 28
1.8.6 代码实现:使用退化学 模行全局微调 29
1.8.7 扩展实例:使用数据增强方法训练模型 30
1.8.8 扩展:分类模型中常用的3种损失函数 31
1.8.9 扩展实例:样本均衡 31
1.9 从深度卷积模型中提取视觉特征 33
1.9.1 使用钩子函数的方式提取视觉特征 33
1.9.2 使用重组结构的方式提取视觉特征 34
第 2章 机器视觉的应用 37
2.1 基于图片内容的处理任务 38
2.1.1 目标检测任务 38
2.1.2 图片分割任务 38
2.1.3 非极大值算法 39
2.1.4 Mask R-N模型 39
2.2 实例:使用Mask R-N模行目标检测与语义分割 41
2.2.1 代码实现:了解PyTorch中目标检测的内置模型 41
2.2.2 代码实现:使用PyTorch中目标检测的内置模型 42
2.2.3 扩展实例:使用内置的预训练模行语义分割 43
2.3 基于内容的处理任务 47
2.4 实例:用GaitSet模型分析人走路的姿态,行身份识别 47
2.4.1 步态识别的做法和思路 47
2.4.2 GaitSet模型 48
2.4.3 多层全流程管线 50
2.4.4 金字塔池化 51
2.4.5 三元损失 52
2.4.6 样本介绍:CASIA-B数据集 53
2.4.7 代码实现:用torch.utils.data接口封装数据集 54
2.4.8 代码实现:用torch.utils.data.sampler类创建含多标签批次数据的采样器 60
2.4.9 代码实现:搭建 GaitSet模型 64
2.4.10 代码实现:自定义三元损失类 67
2.4.11 代码实现:训练模型并保存模型权重文件 69
2.4.12 代码实现:测试模型 72
2.4.13 扩展实例:用深度卷积和大池化 优化模型 77
2.4.14 扩展实例:采样并提取 轮廓 78
2.4.15 步态识别模型的局限 79
2.5 调试技巧 79
2.5.1 解决显存过满损失值为0问题 80
2.5.2 跟踪PyTorch显存并查找显存泄 81
第3章 自然语言处理的相关应用 83
3.1 BERT模型与NLP任务的发展阶段 84
3.1.1 基础的神经网络阶段 84
3.1.2 BERTology阶段 84
3.2 NLP中的常见任务 84
3.2.1 基于文章处理的任务 85
3.2.2 基于句子处理的任务 85
3.2.3 基于句子中词的处理任务 86
3.3 实例:训练中文词向量 87
3.3.1 CBOW和Skip-Gram模型 87
3.3.2 代码实现:样本预处理并生成字典 88
3.3.3 代码实现:按照Skip-Gram模型的规则制作数据集 90
3.3.4 代码实现:搭建模型行 训练 92
3.3.5 夹角余弦 95
3.3.6 代码实现:词嵌入可视化 96
3.3.7 词向量的应用 97
3.4 常用文本处理工具 98
3.4.paCy库的介绍和安装 98
3.4.2 与PyTorch深度结合的文本 处理库torchtext 99
3.4.3 torchtext库及其内置数据集与 调用库的安装 99
3.4.4 torchtext库中的内置预训练词 向量 100
3.5 实例:用TextN模型分析评论者是否满意 100
3.5.1 了解用于文本分类的卷积神经网络模型——TextN 101
3.5.2 样本介绍:了解电影评论 数据集IMDB 102
3.5.3 代码实现:引入基础库 102
3.5.4 代码实现:用torchtext加载 IMDB并拆分为数据集 103
3.5.5 代码实现:加载预训练词向量行样本数据转化 105
3.5.6 代码实现:定义带有Mish激活 函数的TextN模型 107
3.5.7 代码实现:用数据集参数实例化 模型 109
3.5.8 代码实现:用预训练词向量 初始化模型 109
3.5.9 代码实现:用Ranger优化器训练模型 109
3.5.10 代码实现:使用模行预测 112
3.6 了解Transformers库 113
3.6.1 Transformers库的定义 113
3.6.2 Transformers库的安装方法 114
3.6.3 查看Transformers库的版本信息 115
3.6.4 Transformers库的3层应用 结构 115
3.7 实例: 使用Transformers库的管道方式完成多种NLP任务 116
3.7.1 在管道方式中指定NLP任务 116
3.7.2 代码实现:完成文本分类任务 117
3.7.3 代码实现:完成特征提取任务 119
3.7.4 代码实现:完成完形填空任务 120
3.7.5 代码实现:完成阅读理解任务 121
3.7.6 代码实现:完成摘要生成任务 123
3.7.7 预训练模型文件的组成及其加载时的固定文件名称 124
3.7.8 代码实现:完成实体词识别任务 124
3.7.9 管道方式的工作原理 125
3.7.10 在管道方式中加载指定 模型 127
3.8 Transformers库中的AutoModel类 128
3.8.1 各种AutoModel类 128
3.8.2 AutoModel类的模型加载机制 129
3.8.3 Transformers库中更多的预训练 模型 130
3.9 Transformers库中的BERTology系列模型 131
3.9.1 Transformers库的文件结构 131
3.9.2 查找Transformers库中可以使用的模型 135
3.9.3 实例:用BERT模型实现完形填空任务 136
3.9.4 扩展实例:用 AutoModelWithMHead类 替换BertForMaskedLM类 138
3.10 Transformers库中的词表工具 139
3.10.1 PreTrainedTokenizer类中的 特殊词 139
3.10.2 PreTrainedTokenizer类的 特殊词使用 140
3.10.3 向PreTrainedTokenizer类中 添加词 144
3.10.4 实例:用手动加载GPT-2模型 权重的方式将句子补充完整 145
3.10.5 子词的拆分 148
3.11 BERTology系列模型 149
3.11.1 Transformer之前的主流模型 149
3.11.2 Transformer模型 151
3.11.3 BERT模型 153
3.11.4 GPT-2模型 157
3.11.5 Transformer-XL模型 157
3.11.6 XLNet模型 158
3.11.7 XLNet模型与AE模型和AR 模型间的关系 161
3.11.8 RoBERTa模型 161
3.11.9 SpanBERT模型 162
3.11.10 ELECTRA模型 162
3.11.11 T5模型 163
3.11.12 ALBERT模型 164
3.11.13 DistillBERT模型与知识蒸馏 166
3.12 实例: 用迁移学BERT模型来对中文分类 167
3.12.1 样本介绍 167
3.12.2 代码实现:构建数据集 168
3.12.3 代码实现:构建并加载BERT预训练模型 169
3.12.4 BERT模型类的内部逻辑 170
3.12.5 代码实现:用退化学练模型 172
3.12.6 扩展:更多的中文预训练模型 175
3.13 实例:用R-G模型理解文本中的代词 175
3.13.1 代词数据集 175
3.13.2 R-G模型的原理与实现 176
3.13.3 将GAP数据集转化成图结构数据的思路 179
3.13.4 代码实现:用BERT模型提取代词特征 181
3.13.5 代码实现:用BERT模型提取 其他词特征 183
3.13.6 用spaCy工具对句子依存 分析 185
3.13.7 代码实现:使用spaCy和批次 图方法构建图数据集 187
3.13.8 代码实现:搭建多层R-G 模型 192
3.13.9 代码实现:搭建神经网络 分类层 193
3.13.10 使用5折交叉验证方法训练 模型 196
第4章 神经网络的可解释 197
4.1 了解模型解释库 198
4.1.1 了解Captum工具 198
4.1.2 可视化可解释工具Captum Insights 198
4.2 实例:用可解释理解数值分析神经网络模型 199
4.2.1 代码实现:载入模型 199
4.2.2 代码实现:用梯度积分算法分析模型的敏感属 200
4.2.3 代码实现:用Layer Conductance方法查看单个网络层中的神经元 202
4.2.4 代码实现:用Neuron Conductance方法查看每个神经元所关注的属 204
4.3 实例:用可解释理解NLP相关的神经网络模型 205
4.3.1 词嵌入模型的可解释方法 205
4.3.2 代码实现:载入模型类并将其处理 过程拆开 206
4.3.3 代码实现:实例化并加载模型权重,提取模型的词嵌入层 207
4.3.4 代码实现:用梯度积分算法计算模型的可解释 208
4.3.5 代码实现:输出模型可解释的可视化图像 210
4.4 实例:用Bertviz工具可视化BERT模型权重 211
4.4.1 什么是Bertviz工具 212
4.4.2 代码实现:载入BERT模型并可视化其权重 212
4.4.3 解读BERT模型的权重可视化结果 216
4.5 实例:用可解释理解图像处理相关的神经网络模型 219
4.5.1 代码实现:载入模型行图像分类 219
4.5.2 代码实现:用4种可解释算法对模行可解释计算 220
4.5.3 代码实现:可视化模型的4种可解释算法结果 221
4.6 实例:用可解释理解图片分类相关的神经网络模型 222
4.6.1 了解Grad-CAM方法 223
4.6.2 代码实现:加载ResNet18模型并注册钩子函数提取特征数据 225
4.6.3 代码实现:调用模型提取中间层特征数据和输出层权重 226
4.6.4 代码实现:可视化模型的识别区域 227
第5章 识别未知分类的方法——零次 学29
5.1 了解零次学30
5.1.1 零次学想与原理 230
5.1.2 与零次学的常用数据集 232
5.1.3 零次学本做法 233
5.1.4 直推式学33
5.1.5 泛化的零次学 233
5.2 零次学常见问题 233
5.2.1 领域漂移问题 234
5.2.2 原型稀疏问题 235
5.2.3 语义间隔问题 235
5.3 带有视觉结构约束的VSC模型 236
5.3.1 分类模型中视觉特征的本质 236
5.3.2 VSC模型的原理 237
5.3.3 基于视觉中心点学束方法 238
5.3.4 基于倒角距离的视觉结构约束方法 239
5.3.5 什么是对称的倒角距离 239
5.3.6 基于二分匹配的视觉结构约束方法 239
5.3.7 什么是指派问题与耦合矩阵 240
5.3.8 基于W距离的视觉结构约束方法 240
5.3.9 什么是优传输 241
5.3.10 什么是优传输中的熵 正则化 242
5.4 详解Sinkhorn 算法 244
5.4.1 Sinkhorn算法的求解转换 244
5.4.2 Sinkhorn算法的原理 245
5.4.3 Sinkhorn算法中参数ε的 原理 246
5.4.4 举例Sinkhorn算法过程 246
5.4.5 Sinkhorn算法中的质量守恒 248
5.4.6 Sinkhorn算法的代码实现 250
5.5 实例:使用VSC模型来识别未知类别的鸟类图片 252
5.5.1 样本介绍:用于ZSL任务的鸟类数据集 252
5.5.2 代码实现:用迁移学式获得 训练数据集分类模型 253
5.5.3 使用分类模型提取图片视觉 特征 254
5.5.4 代码实现:用多层图卷积神经 网络实现VSC模型 255
5.5.5 代码实现:基于W距离的损失 函数 256
5.5.6 加载数据行训练 257
5.5.7 代码实现:根据特征距离对图片行分类 258
5.6 针对零次学能分析 259
5.6.1 分析视觉特征的质量 259
5.6.2 分析直推式学果 260
5.6.3 分析直推模型的能力 261
5.6.4 分析未知类别的聚类效果 262
5.6.5 清洗测试集 263
5.6.6 利用可视化方行辅助分析 264
第6章 异构图神经网络 267
6.1 异构图的基础知识 268
6.1.1 同构图与异构图 268
6.1.2 什么是异构图神经网络 268
6.1.3 二分图 268
6.1.4 局部图卷积 270
6.2 二分图的实现方式 270
6.2.1 用NetworkX实现二分图 270
6.2.2 使用DGL构建二分图 272
6.2.3 二分图对象的调试技巧 275
6.3 异构图的实现方式 276
6.3.1 创建异构图 276
6.3.2 设置异构图的节点个数 277
6.3.3 异构图结构的查看方式 278
6.3.4 异构图与同构图的相互转化 280
6.3.5 异构图与同构图的属操作方式 281
6.4 行走采样 282
6.4.1 什么是行走 283
6.4.2 普通行走 283
6.4.3 带停止概率的行走 284
6.4.4 带路径概率的行走 284
6.4.5 基于原图的行走 285
6.4.6 在基于异构图的行走中设置停止概率 286
6.4.7 基于行走采样的数据处理 287
6.4.8 以行走的方式对邻居节点采样 287
6.5 DGL库中的块图结构 289
6.5.1 设计块图的动机 289
6.5.2 将同构图转化成块图 290
6.5.3 块图的属操作 290
6.5.4 将二分图转化成块图 291
6.6 实例:使用PinSAGE模系统 292
6.6.1 准备MoiveLens数据集 292
6.6.2 代码实现:用Panadas库加载数据 293
6.6.3 Categories与category 类型 294
6.6.4 代码实现:生成异构图 295
6.6.5 代码实现:用边分组方法拆分并保存数据集 296
6.6.6 PinSAGE模型 299
6.6.7 代码实现:构建带有邻居节点采能的数据加载器 300
6.6.8 代码实现:PinSAGE模型的采样 过程 305
6.6.9 代码实现:搭建PinSAGE模型 309
6.6.10 代码实现:实例化PinSAGE模型类行训练 315
6.6.11 代码实现:用PinSAGE模型为电影 315
6.6.12 扩展:在PinSAGE模型中融合 更多的特征数据 317
6.7结 317