Echidna 数据集
了解深度学习,并学习Echidna数据集的属性。
深度学习
-
深度学习是一系列复杂的技术,但其核心源于一个简单的思想:神经网络在拥有更多层时会变得更强大。这些“深层”网络比我们之前构建的三层“浅层”网络面临更多挑战。在接下来的几章中,我们将描述并克服这些挑战。
-
增加层数只是一个起点。在过去几年里,深度学习的原始概念衍生出许多创新甚至令人惊叹的新思路。我们也将探讨其中的一些方向。
-
在第一部分和第二部分中,我们使用 MNIST 作为基准数据集。第三部分的前几章仍将以 MNIST 为起点,但最终我们会超越它,转向更复杂的实际数据集。
-
本课程的第三部分聚焦于深度学习——现代人工智能的重大突破。深度学习包含多种含义,但首要的一点正如前面所述:指具有多个隐藏层的神经网络。深层网络相比浅层网络具备更复杂的模型能力,因此可以拟合更加复杂的函数来逼近数据。
后续我们会发现,深度学习远不止是增加层数这么简单。实际上,它是一系列相互关联的技术的集合,包括卷积(convolutions)、循环神经网络(recurrent neural networks)以及生成对抗网络(generative adversarial networks)等。到本课程结束时,我们将对这些技术有更清晰的理解,并具备独立深入探索的能力。
首先,让我们从最基本的概念出发:为神经网络增加层数。在本章中,我们将构建两个网络:
- 一个浅层网络,包含三层
- 一个稍深层的网络,包含四层
我们将在这两个网络上运行相同的数据集,并比较它们的表现结果。
在本课程的前两部分,我们是从零开始逐行编写代码的。然而,随着进入深度学习阶段,这种方式将耗费越来越多的时间,且必要性逐渐降低——因为我们已经掌握了基本原理,无需再纠缠于每一个细节。从本章开始,我们将使用 Keras 这一流行的机器学习库来构建神经网络。我们将专注于整体架构设计,而 Keras 将负责处理底层实现细节。
以下是本章的主要内容概要:
- 学习如何使用 Keras 构建神经网络
- 编写一个三层网络并在简单数据集上运行
- 为网络增加一层,观察其性能变化
准备针鼹数据集
在开始构建网络之前,我们先准备一个用于训练和测试的数据集。回顾一下边界追踪这一概念。很快我们就能看到,当神经网络增加第四层时,其决策边界会发生怎样的变化。为此,我们需要一个结构曲折但易于可视化的数据集。如下所示:
该数据集有两个输入变量,两类样本分别用 方块 和 三角形 表示。你可能会注意到,这个数据集的形状恰好像一种叫做针鼹的有袋类动物。
针鼹数据集保存在一个名为 echidna.txt 的文件中。同时提供了一个 echidna.py 文件,功能类似于之前章节中的 mnist.py。该脚本将数据和标签加载到两个变量 X 和 Y 中,并将其划分为 训练集、验证集 和 测试集:
1import echidna as data 2 3print(data.X.shape, "\n") 4print(data.X[0:3], "\n") 5print(data.Y[0:3], "\n") 6print(data.X_train.shape, "\n") 7print(data.Y_train.shape)
本章中我们不会使用 测试集,但 训练集 和 验证集 将很快派上用场。