使用 Keras 进行深度学习 - 深度学习

正如介绍中所说,深度学习是一个使用大量数据训练人工神经网络的过程。一旦训练完成,网络将能够对未见数据做出预测。在我进一步解释什么是深度学习之前,让我们快速了解一下训练神经网络时使用的一些术语。

神经网络

人工神经网络的概念源自我们大脑中的神经网络。典型的神经网络由三层组成——输入层、输出层和隐藏层,如下图所示。

神经网络

这也称为浅层神经网络,因为它只包含一个隐藏层。您可以在上面的架构中添加更多隐藏层,以创建更复杂的架构。

深度网络

下图显示了一个由四个隐藏层、一个输入层和一个输出层组成的深度网络。

深度网络

随着隐藏层数量的增加,网络的训练在所需资源和完全训练网络所需的时间方面变得更加复杂。

网络训练

定义网络架构后,您可以训练它进行某些类型的预测。训练网络是找到网络中每个链接的适当权重的过程。在训练期间,数据通过各种隐藏层从输入层流向输出层。由于数据总是从输入到输出朝一个方向移动,我们将此网络称为前馈网络,将数据传播称为正向传播。

激活函数

在每一层,我们计算输入的加权和并将其馈送到激活函数。激活函数为网络带来非线性。它只是一些离散化输出的数学函数。一些最常用的激活函数是 S 型、双曲函数、正切 (tanh)、ReLU 和 Softmax。

反向传播

反向传播是一种监督学习算法。在反向传播中,误差从输出层向后传播到输入层。给定一个误差函数,我们计算误差函数相对于每个连接处分配的权重的梯度。梯度的计算通过网络向后进行。首先计算最后一层权重的梯度,最后计算第一层权重的梯度。

在每一层,梯度的部分计算都会在前一层梯度的计算中重复使用。这称为梯度下降。

在这个基于项目的教程中,您将定义一个前馈深度神经网络,并使用反向传播和梯度下降技术对其进行训练。幸运的是,Keras 为我们提供了所有高级 API,用于定义网络架构并使用梯度下降对其进行训练。接下来,您将学习如何在 Keras 中执行此操作。

手写数字识别系统

在这个小项目中,您将应用前面描述的技术。您将创建一个深度学习神经网络,该神经网络将接受训练以识别手写数字。在任何机器学习项目中,第一个挑战都是收集数据。特别是对于深度学习网络,您需要大量的数据。幸运的是,对于我们试图解决的问题,有人已经创建了一个用于训练的数据集。这就是 mnist,它是 Keras 库的一部分。该数据集由几张 28x28 像素的手写数字图像组成。您将在该数据集的主要部分上训练您的模型,其余数据将用于验证您训练过的模型。

项目描述

mnist 数据集包含 70000 张手写数字图像。这里重现了一些示例图像供您参考

Mnist Dataset

每张图像的大小为 28 x 28 像素,总共有 768 个不同灰度级别的像素。大多数像素趋向于黑色阴影,而只有少数像素趋向于白色。我们将把这些像素的分布放在一个数组或向量中。例如,下图显示了数字 4 和 5 的典型图像的像素分布。

每张图像的大小为 28 x 28 像素,总共有 768 个不同灰度级别的像素。大多数像素趋向于黑色,只有少数像素趋向于白色。我们将这些像素的分布放在数组或向量中。例如,下图显示了数字 4 和 5 的典型图像的像素分布。

项目描述

显然,您可以看到像素(尤其是趋向于白色的像素)的分布不同,这区分了它们所代表的数字。我们将把这个 784 像素的分布作为输入提供给我们的网络。网络的输出将由 10 个类别组成,代表 0 到 9 之间的数字。

我们的网络将由 4 层组成——一个输入层、一个输出层和两个隐藏层。每个隐藏层将包含 512 个节点。每层都完全连接到下一层。当我们训练网络时,我们将计算每个连接的权重。我们通过应用之前讨论过的反向传播和梯度下降来训练网络。