1 准备深度学习的环境 1
1.1 硬件环境的搭建和配置选择 . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 通用图形处理单元 . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2 你需要什么样的 GPU 加速卡 . . . . . . . . . . . . . . . . . . . . 6
1.1.3 你的 GPU 需要多少内存 . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.4 是否应该用多个 GPU . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2 安装软件环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.1 所需软件列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.2 CUDA 的安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.3 Python 计算环境的安装 . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.4 深度学习建模环境介绍 . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2.5 安装 CNTK 及对应的 Keras . . . . . . . . . . . . . . . . . . . . . 17
1.2.6 安装 Theano 计算环境 . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.2.7 安装 TensorFlow 计算环境 . . . . . . . . . . . . . . . . . . . . . . 25
1.2.8 安装 cuDNN 和 CNMeM . . . . . . . . . . . . . . . . . . . . . . . 27
2 数据收集与处理 28
2.1 网络爬虫 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.1.1 网络爬虫技术 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.2 构造自己的 Scrapy 爬虫 . . . . . . . . . . . . . . . . . . . . . . . 30
2.1.3 构造可接受参数的 Scrapy 爬虫 . . . . . . . . . . . . . . . . . . . 35
2.1.4 运行 Scrapy 爬虫 . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.1.5 运行 Scrapy 爬虫的一些要点 . . . . . . . . . . . . . . . . . . . . . 38
2.2 大规模非结构化数据的存储和分析 . . . . . . . . . . . . . . . . . . . . . 40
2.2.1 ElasticSearch 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.2.2 ElasticSearch 应用实例 . . . . . . . . . . . . . . . . . . . . . . . . 44
3 深度学习简介 57
3.1 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.2 深度学习的统计学入门 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.3 一些基本概念的解释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.3.1 深度学习中的函数类型 . . . . . . . . . . . . . . . . . . . . . . . . 62
3.3.2 深度学习中的其他常见概念 . . . . . . . . . . . . . . . . . . . . . 65
3.4 梯度递减算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.5 后向传播算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4 Keras 入门 72
4.1 Keras 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.2 Keras 中的数据处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.2.1 文字预处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.2.2 序列数据预处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.2.3 图片数据输入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.3 Keras 中的模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.4 Keras 中的重要对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
4.5 Keras 中的网络层构造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.6 使用 Keras 进行奇异值矩阵分解 . . . . . . . . . . . . . . . . . . . . . . . 102
5 推荐系统 105
5.1 推荐系统简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
5.2 矩阵分解模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
5.3 深度神经网络模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5.4 其他常用算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
5.5 评判模型指标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
6 图像识别 121
6.1 图像识别入门 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
6.2 卷积神经网络的介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
6.3 端到端的 MNIST 训练数字识别 . . . . . . . . . . . . . . . . . . . . . . . 127
6.4 利用 VGG16 网络进行字体识别 . . . . . . . . . . . . . . . . . . . . . . . 131
6.5 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
7 自然语言情感分析 136
7.1 自然语言情感分析简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
7.2 文字情感分析建模 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
7.2.1 词嵌入技术 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
7.2.2 多层全连接神经网络训练情感分析 . . . . . . . . . . . . . . . . . 140
7.2.3 卷积神经网络训练情感分析 . . . . . . . . . . . . . . . . . . . . . 143
7.2.4 循环神经网络训练情感分析 . . . . . . . . . . . . . . . . . . . . . 144
7.3 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
8 文字生成 147
8.1 文字生成和聊天机器人 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
8.2 基于检索的对话系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
8.3 基于深度学习的检索式对话系统 . . . . . . . . . . . . . . . . . . . . . . . 159
8.3.1 对话数据的构造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
8.3.2 构造深度学习索引模型 . . . . . . . . . . . . . . . . . . . . . . . . 162
8.4 基于文字生成的对话系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
8.5 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
9 时间序列 173
9.1 时间序列简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
9.2 基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
9.3 时间序列模型预测准确度的衡量 . . . . . . . . . . . . . . . . . . . . . . . 178
9.4 时间序列数据示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
9.5 简要回顾 ARIMA 时间序列模型 . . . . . . . . . . . . . . . . . . . . . . . 181
9.6 循环神经网络与时间序列模型 . . . . . . . . . . . . . . . . . . . . . . . . 186
9.7 应用案例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
9.7.1 长江汉口月度流量时间序列模型 . . . . . . . . . . . . . . . . . . 190
9.7.2 国际航空月度乘客数时间序列模型 . . . . . . . . . . . . . . . . . 203
9.8 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
10 智能物联网 210
10.1 Azure 和 IoT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
10.2 Azure IoT Hub 服务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
10.3 使用 IoT Hub 管理设备概述 . . . . . . . . . . . . . . . . . . . . . . . . . . 215
10.4 使用.NET 将模拟设备连接到 IoT 中心 . . . . . . . . . . . . . . . . . . . . 218
10.5 机器学习应用实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237