Deep Learning With Keras 简明教程

Deep Learning with Keras - Deep Learning

如引言所述,深度学习是一个用大量数据训练人工神经网络的过程。一旦经过训练,网络将能够对看不见的数据给我们预测。在我进一步解释深度学习是什么之前,让我们快速浏览一下在训练神经网络时使用的一些术语。

Neural Networks

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

neural networks

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

Deep Networks

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

deep networks

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

Network Training

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

Activation Function

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

Backpropagation

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

在每一层中,梯度的部分计算在计算上一层的梯度时会得到重用。这被称为梯度下降。

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

Handwritten Digit Recognition System

在此迷你项目中,您将应用前面描述的技术。您将创建一个用于识别手写数字的深度学习神经网络。在任何机器学习项目中,第一个挑战都是收集数据。特别是,对于深度学习网络来说,您需要大量数据。幸运的是,对于我们试图解决的问题,有人已经创建了一个用于训练的数据集。这被称为 mnist,它作为 Keras 库的一部分提供。该数据集包含几个 28x28 像素的手写数字图像。您将在该数据集的主要部分训练您的模型,而其余数据将用于验证您的训练模型。

Project Description

mnist 数据集包含 70000 个手写数字图像。这里复制了几幅示例图像供您参考

mnist dataset

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

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

project description

显然,您可以看到像素的分布(尤其是偏向白色调的像素)不同,这可以区分它们所代表的数字。我们将把这 784 个像素的分布作为输入馈送至我们的网络。该网络的输出将包含 10 个类别,表示介于 0 到 9 之间的数字。

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