---------------------------Python人工智能项目实战---------------------------
译者序
前言
作者简介
审校者简介
第1章 人工智能系统基础知识1
1.1 神经网络2
1.2 神经激活单元5
1.2.1 线性激活单元5
1.2.2 sigmoid激活单元6
1.2.3 双曲正切激活函数6
1.2.4 修正线性单元7
1.2.5 softmax激活单元9
1.3 用反向传播算法训练神经网络9
1.4 卷积神经网络12
1.5 循环神经网络13
1.6 生成对抗网络16
1.7 强化学习18
1.7.1 Q学习19
1.7.2 深度Q学习20
1.8 迁移学习21
1.9 受限玻尔兹曼机22
1.10 自编码器23
1.11 总结24
第2章 迁移学习26
2.1 技术要求26
2.2 迁移学习简介27
2.3 迁移学习和糖尿病视网膜病变检测28
2.4 糖尿病视网膜病变数据集29
2.5 定义损失函数30
2.6 考虑类别不平衡问题31
2.7 预处理图像32
2.8 使用仿射变换生成额外数据33
2.8.1 旋转34
2.8.2 平移34
2.8.3 缩放35
2.8.4 反射35
2.8.5 通过仿射变换生成额外的图像36
2.9 网络架构36
2.9.1 VGG16迁移学习网络38
2.9.2 InceptionV3迁移学习网络39
2.9.3 ResNet50迁移学习网络39
2.10 优化器和初始学习率40
2.11 交叉验证40
2.12 基于验证对数损失的模型检查点40
2.13 训练过程的Python实现41
2.14 类别分类结果50
2.15 在测试期间进行推断50
2.16 使用回归而非类别分类52
2.17 使用keras sequential工具类生成器53
2.18 总结57
第3章 神经机器翻译58
3.1 技术要求59
3.2 基于规则的机器翻译59
3.2.1 分析阶段59
3.2.2 词汇转换阶段60
3.2.3 生成阶段60
3.3 统计机器学习系统60
3.3.1 语言模型61
3.3.2 翻译模型63
3.4 神经机器翻译65
3.4.1 编码器–解码器模型65
3.4.2 使用编码器–解码器模型进行推断66
3.5 实现序列到序列的神经机器翻译67
3.5.1 处理输入数据67
3.5.2 定义神经翻译机器的模型71
3.5.3 神经翻译机器的损失函数73
3.5.4 训练模型73
3.5.5 构建推断模型74
3.5.6 单词向量嵌入78
3.5.7 嵌入层79
3.5.8 实现基于嵌入的NMT79
3.6 总结84
第4章 基于GAN的时尚风格迁移85
4.1 技术要求85
4.2 DiscoGAN86
4.3 CycleGAN88
4.4 学习从手绘轮廓生成自然手提包89
4.5 预处理图像89
4.6 DiscoGAN的生成器91
4.7 DiscoGAN的判别器93
4.8 构建网络和定义损失函数94
4.9 构建训练过程97
4.10 GAN训练中的重要参数值99
4.11 启动训练100
4.12 监督生成器和判别器的损失101
4.13 DiscoGAN生成的样例图像103
4.14 总结104
第5章 视频字幕应用105
5.1 技术要求105
5.2 视频字幕中的CNN和LSTM106
5.3 基于序列到序列的视频字幕系统107
5.4 视频字幕系统数据集109
5.5 处理视频图像以创建CNN特征110
5.6 处理视频的带标签字幕113
5.7 构建训练集和测试集114
5.8 构建模型115
5.8.1 定义模型的变量116
5.8.2 编码阶段117
5.8.3 解码阶段117
5.8.4 计算小批量损失118
5.9 为字幕创建单词词汇表118
5.10 训练模型119
5.11 训练结果123
5.12 对未见过的视频进行推断124
5.12.1 推断函数126
5.12.2 评估结果127
5.13 总结128
第6章 智能推荐系统129
6.1 技术要求129
6.2 什么是推荐系统129
6.3 基于潜在因子分解的推荐系统131
6.4 深度学习与潜在因子协同过滤132
6.5 SVD++136
6.6 基于受限玻尔兹曼机的推荐系统138
6.7 对比分歧139
6.8 使用RBM进行协同过滤140
6.9 使用RBM实现协同过滤142
6.9.1 预处理输入143
6.9.2 构建RBM网络进行协作过滤144
6.9.3 训练RBM 147
6.10 使用训练好的RBM进行推断149
6.11 总结150
第7章 用于电影评论情感分析的移动应用程序151
7.1 技术要求152
7.2 使用TensorFlow mobile构建Android移动应用程序152
7.3 Android应用中的电影评论评分153
7.4 预处理电影评论文本154
7.5 构建模型156
7.6 训练模型157
7.7 将模型冻结为protobuf格式159
7.8 为推断创建单词到表征的字典161
7.9 应用程序交互界面设计162
7.10 Android应用程序的核心逻辑164
7.11 测试移动应用168
7.12 总结170
第8章 提供客户服务的AI聊天机器人171
8.1 技术要求172
8.2 聊天机器人的架构172
8.3 基于LSTM的序列到序列模型173
8.4 建立序列到序列模型174
8.5 Twitter平台上的聊天机器人174
8.5.1 构造聊天机器人的训练数据175
8.5.2 将文本数据转换为单词索引175
8.5.3 替换匿名用户名176
8.5.4 定义模型176
8.5.5 用于训练模型的损失函数178
8.5.6 训练模型179
8.5.7 从模型生成输出响应180
8.5.8 所有代码连起来180
8.5.9 开始训练181
8.5.10 对一些输入推特的推断结果181
8.6 总结182
第9章 基于增强学习的无人驾驶183
9.1 技术要求183
9.2 马尔科夫决策过程184
9.3 学习Q值函数185
9.4 深度Q学习186
9.5 形式化损失函数186
9.6 深度双Q学习187
9.7 实现一个无人驾驶车的代码189
9.8 深度Q学习中的动作离散化189
9.9 实现深度双Q值网络190
9.10 设计智能体191
9.11 自动驾驶车的环境194
9.12 将所有代码连起来197
9.13 训练结果202
9.14 总结203
第10章 从深度学习的角度看CAPTCHA204
10.1 技术要求205
10.2 通过深度学习破解CAPTCHA205
10.2.1 生成基本的CAPTCHA205
10.2.2 生成用于训练CAPTCHA破解器的数据206
10.2.3 CAPTCHA破解器的CNN架构208
10.2.4 预处理CAPTCHA图像208
10.2.5 将CAPTCHA字符转换为类别209
10.2.6 数据生成器210
10.2.7 训练CAPTCHA破解器211
10.2.8 测试数据集的准确性212
10.3 通过对抗学习生成CAPTCHA214
10.3.1 优化GAN损失215
10.3.2 生成器网络215
10.3.3 判别器网络216
10.3.4 训练GAN219
10.3.5 噪声分布220
10.3.6 数据预处理220
10.3.7 调用训练221
10.3.8 训练期间CAPTCHA的质量222
10.3.9 使用训练后的生成器创建CAPTCHA224
10.4 总结225
---------------------------TensorFlow自然语言处理---------------------------
译者序
前言
关于作者
关于审阅者
第1章 自然语言处理简介 1
1.1 什么是自然语言处理 1
1.2 自然语言处理的任务 2
1.3 传统的自然语言处理方法 3
1.3.1 理解传统方法 4
1.3.2 传统方法的缺点 7
1.4 自然语言处理的深度学习方法 8
1.4.1 深度学习的历史 8
1.4.2 深度学习和NLP的当前状况 9
1.4.3 理解一个简单的深层模型—全连接神经网络 10
1.5 本章之外的学习路线 12
1.6 技术工具简介 14
1.6.1 工具说明 15
1.6.2 安装Python和scikit-learn 15
1.6.3 安装Jupyter Notebook 15
1.6.4 安装TensorFlow 16
1.7 总结 17
第2章 理解TensorFlow 18
2.1 TensorFlow是什么 18
2.1.1 TensorFlow入门 19
2.1.2 TensorFlow客户端详细介绍 21
2.1.3 TensorFlow架构:当你执行客户端时发生了什么 21
2.1.4 Cafe Le TensorFlow:使用类比理解TensorFlow 23
2.2 输入、变量、输出和操作 24
2.2.1 在TensorFlow中定义输入 25
2.2.2 在TensorFlow中定义变量 30
2.2.3 定义TensorFlow输出 31
2.2.4 定义TensorFlow操作 31
2.3 使用作用域重用变量 40
2.4 实现我们的第一个神经网络 42
2.4.1 准备数据 43
2.4.2 定义TensorFLow图 43
2.4.3 运行神经网络 45
2.5 总结 46
第3章 Word2vec——学习词嵌入 48
3.1 单词的表示或含义是什么 49
3.2 学习单词表示的经典方法 49
3.2.1 WordNet—使用外部词汇知识库来学习单词表示 50
3.2.2 独热编码表示方式 53
3.2.3 TF-IDF方法 53
3.2.4 共现矩阵 54
3.3 Word2vec—基于神经网络学习单词表示 55
3.3.1 练习:queen = king – he + she吗 56
3.3.2 为学习词嵌入定义损失函数 58
3.4 skip-gram算法 59
3.4.1 从原始文本到结构化的数据 59
3.4.2 使用神经网络学习词嵌入 60
3.4.3 使用TensorFlow实现skip-gram 67
3.5 连续词袋算法 69
3.6 总结 71
第4章 高级Word2vec 72
4.1 原始skip-gram算法 72
4.1.1 实现原始skip-gram算法 73
4.1.2 比较原始skip-gram算法和改进的skip-gram算法 75
4.2 比较skip-gram算法和CBOW算法 75
4.2.1 性能比较 77
4.2.2 哪个更胜一筹:skip-gram还是CBOW 79
4.3 词嵌入算法的扩展 81
4.3.1 使用unigram分布进行负采样 81
4.3.2 实现基于unigram的负采样 81
4.3.3 降采样:从概率上忽视常用词 83
4.3.4 实现降采样 84
4.3.5 比较CBOW及其扩展算法 84
4.4 最近的skip-gram和CBOW的扩展算法 85
4.4.1 skip-gram算法的限制 85
4.4.2 结构化skip-gram算法 85
4.4.3 损失函数 86
4.4.4 连续窗口模型 87
4.5 GloVe:全局向量表示 88
4.5.1 理解GloVe 88
4.5.2 实现GloVe 89
4.6 使用Word2vec进行文档分类 90
4.6.1 数据集 91
4.6.2 用词向量进行文档分类 91
4.6.3 实现:学习词嵌入 92
4.6.4 实现:词嵌入到文档嵌入 92
4.6.5 文本聚类以及用t-SNE可视化文档嵌入 93
4.6.6 查看一些特异点 94
4.6.7 实现:用K-means对文档进行分类/聚类 95
4.7 总结 96
第5章 用卷积神经网络进行句子分类 97
5.1 介绍卷积神经网络 97
5.1.1 CNN基础 97
5.1.2 卷积神经网络的力量 100
5.2 理解卷积神经网络 100
5.2.1 卷积操作 100
5.2.2 池化操作 103
5.2.3 全连接层 104
5.2.4 组合成完整的CNN 105
5.3 练习:在MNIST数据集上用CNN进行图片分类 105
5.3.1 关于数据 106
5.3.2 实现CNN 106
5.3.3 分析CNN产生的预测结果 108
5.4 用CNN进行句子分类 109
5.4.1 CNN结构 110
5.4.2 随时间池化 112
5.4.3 实现:用CNN进行句子分类 112
5.5 总结 115
第6章 递归神经网络 116
6.1 理解递归神经网络 116
6.1.1 前馈神经网络的问题 117
6.1.2 用递归神经网络进行建模 118
6.1.3 递归神经网络的技术描述 119
6.2 基于时间的反向传播 119
6.2.1 反向传播的工作原理 120
6.2.2 为什么RNN不能直接使用反向传播 120
6.2.3 基于时间的反向传播:训练RNN 121
6.2.4 截断的BPTT:更有效地训练RNN 121
6.2.5 BPTT的限制:梯度消失和梯度爆炸 122
6.3 RNN的应用 123
6.3.1 一对一RNN 123
6.3.2 一对多RNN 123
6.3.3 多对一RNN 124
6.3.4 多对多RNN 124
6.4 用RNN产生文本 125
6.4.1 定义超参数 125
6.4.2 将输入随时间展开用于截断的BPTT 125
6.4.3 定义验证数据集 126
6.4.4 定义权重和偏置 126
6.4.5 定义状态持续变量 127
6.4.6 用展开的输入计算隐藏状态和输出 127
6.4.7 计算损失 128
6.4.8 在新文本片段的开头重置状态 128
6.4.9 计算验证输出 128
6.4.10 计算梯度和优化 129
6.4.11 输出新生成的文本块 129
6.5 评估RNN的文本结果输出 130
6.6 困惑度:衡量文本结果的质量 131
6.7 有上下文特征的递归神经网络:更长记忆的RNN 132
6.7.1 RNN-CF的技术描述 132
6.7.2 实现RNN-CF 133
6.7.3 RNN-CF产生的文本 138
6.8 总结 140
第7章 长短期记忆网络 142
7.1 理解长短期记忆网络 142
7.1.1 LSTM是什么 143
7.1.2 更详细的LSTM 144
7.1.3 LSTM与标准RNN的区别 149
7.2 LSTM如何解决梯度消失问题 150
7.2.1 改进LSTM 152
7.2.2 贪婪采样 153
7.2.3 集束搜索 153
7.2.4 使用词向量 154
7.2.5 双向LSTM(BiLSTM) 155
7.3 其他LSTM的变体 156
7.3.1 窥孔连接 156
7.3.2 门循环单元 157
7.4 总结 159
第8章 LSTM应用:文本生成 160
8.1 数据集 160
8.1.1 关于数据集 160
8.1.2 数据预处理 162
8.2 实现LSTM 162
8.2.1 定义超参数 163
8.2.2 定义参数 163
8.2.3 定义LSTM单元及操作 165
8.2.4 定义输入和标签 165
8.2.5 定义处理序列数据所需的序列计算 166
8.2.6 定义优化器 167
8.2.7 随时间衰减学习率 167
8.2.8 做预测 168
8.2.9 计算困惑度(损失) 168
8.2.10 重置状态 169
8.2.11 贪婪采样避免单峰 169
8.2.12 生成新文本 169
8.2.13 生成的文本样例 170
8.3 LSTM与窥孔LSTM和GRU对比 171
8.3.1 标准LSTM 171
8.3.2 门控循环单元(GRU) 172
8.3.3 窥孔LSTM 174
8.3.4 训练和验证随时间的困惑度 175
8.4 改进LSTM:集束搜索 176
8.4.1 实现集束搜索 177
8.4.2 集束搜索生成文本的示例 179
8.5 LSTM改进:用单词替代n-gram生成文本 179
8.5.1 维度灾难 179
8.5.2 Word2vec补救 180
8.5.3 使用Word2vec生成文本 180
8.5.4 使用LSTM-Word2vec和集束搜索生成的文本示例 181
8.5.5 随时间困惑度 182
8.6 使用TensorFlow RNN API 183
8.7 总结 186
第9章 LSTM应用:图像标题生成 188
9.1 了解数据 188
9.1.1 ILSVRC ImageNet数据集 189
9.1.2 MS-COCO数据集 189
9.2 图像标题生成实现路径 191
9.3 使用CNN提取图像特征 193
9.4 实现:使用VGG-16加载权重和推理 193
9.4.1 构建和更新变量 194
9.4.2 预处理输入 195
9.4.3 VGG-16推断 196
9.4.4 提取图像的向量化表达 197
9.4.5 使用VGG-16预测类别概率 197
9.5 学习词嵌入 198
9.6 准备输入LSTM的标题 198
9.7 生成LSTM的数据 199
9.8 定义LSTM 201
9.9 定量评估结果 203
9.9.1 BLEU 203
9.9.2 ROUGE 204
9.9.3 METEOR 204
9.9.4 CIDEr 206
9.9.5 模型随着时间变化的BLEU-4 206
9.10 为测试图像生成标题 207
9.11 使用TensorFlow RNN API和预训练的GloVe词向量 210
9.11.1 加载GloVe词向量 210
9.11.2 清洗数据 212
9.11.3 使用TensorFlow RNN API和预训练的词嵌入 213
9.12 总结 218
第10章 序列到序列学习:神经机器翻译 220
10.1 机器翻译 220
10.2 机器翻译简史 221
10.2.1 基于规则的翻译 221
10.2.2 统计机器翻译(SMT) 222
10.2.3 神经机器翻译(NMT) 223
10.3 理解神经机器翻译 225
10.3.1 NMT原理 225
10.3.2 NMT架构 226
10.4 为NMT系统准备数据 228
10.4.1 训练阶段 229
10.4.2 反转源句 229
10.4.3 测试阶段 230
10.5 训练NMT 230
10.6 NMT推理 231
10.7 BLEU评分:评估机器翻译系统 232
10.7.1 修正的精确度 232
10.7.2 简短惩罚项 233
10.7.3 最终BLEU得分 233
10.8 从头开始实现NMT:德语到英语的翻译 233
10.8.1 数据介绍 234
10.8.2 处理数据 234
10.8.3 学习词嵌入 235
10.8.4 定义编码器和解码器 236
10.8.5 定义端到端输出计算 238
10.8.6 翻译结果 239
10.9 结合词嵌入训练NMT 241
10.9.1 最大化数据集词汇表和预训练词嵌入之间的匹配 241
10.9.2 将嵌入层定义为TensorFlow变量 243
10.10 改进NMT 245
10.10.1 教师强迫 246
10.10.2 深度LSTM 247
10.11 注意力 247
10.11.1 突破上下文向量瓶颈 247
10.11.2 注意力机制细节 248
10.11.3 注意力NMT的翻译结果 253
10.11.4 源句子和目标句子注意力可视化 254
10.12 序列到序列模型的其他应用:聊天机器人 256
10.12.1 训练聊天机器人 256
10.12.2 评估聊天机器人:图灵测试 257
10.13 总结 258
第11章 自然语言处理的现状与未来 259
11.1 NLP现状 259
11.1.1 词嵌入 260
11.1.2 神经机器翻译 264
11.2 其他领域的渗透 266
11.2.1 NLP与计算机视觉结合 266
11.2.2 强化学习 268
11.2.3 NLP生成式对抗网络 269
11.3 走向通用人工智能 270
11.3.1 一个模型学习全部 271
11.3.2 联合多任务模型:为多个NLP任务生成神经网络 272
11.4 社交媒体NLP 273
11.4.1 社交媒体中的谣言检测 274
11.4.2 社交媒体中的情绪检测 274
11.4.3 分析推特中的政治框架 274
11.5 涌现的新任务 275
11.5.1 讽刺检测 275
11.5.2 语言基础 276
11.5.3 使用LSTM略读文本 276
11.6 新兴的机器学习模型 277
11.6.1 阶段LSTM 277
11.6.2 扩张RNN(DRNN) 278
11.7 总结 278
11.8 参考文献 279
附录 数学基础与高级TensorFlow 282