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

📅  最后修改于: 2020-12-11 05:03:24             🧑  作者: Mango


正如引言中所述,深度学习是训练具有大量数据的人工神经网络的过程。经过培训后,网络将能够为我们提供看不见数据的预测。在进一步解释什么是深度学习之前,让我们快速了解一下用于训练神经网络的术语。

神经网络

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

神经网络

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

深度网络

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

深度网络

随着向网络中添加隐藏层的数量,就其训练而言,就所需的资源和全面训练网络所花费的时间而言,变得更加复杂。

网络培训

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

激活功能

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

反向传播

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

在每一层,梯度的部分计算将在上一层的梯度计算中重新使用。这称为梯度下降。

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

手写数字识别系统

在这个小型项目中,您将应用前面介绍的技术。您将创建一个深度学习神经网络,将对其进行训练以识别手写数字。在任何机器学习项目中,第一个挑战就是收集数据。特别是对于深度学习网络,您需要庞大的数据。幸运的是,对于我们要解决的问题,有人已经创建了一个训练数据集。这称为mnist,可作为Keras库的一部分使用。数据集由几张28×28像素的手写数字图像组成。您将在此数据集的主要部分上训练模型,其余数据将用于验证训练后的模型。

项目简介

mnist数据集包含70000个手写数字图像。这里复制了一些样本图像供您参考

Mnist数据集

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

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

项目简介

显然,您可以看到像素的分布(尤其是趋于白色的像素)有所不同,这可以区分它们所代表的数字。我们会将这784个像素的分布作为输入输入到我们的网络中。网络的输出将包含10个类别,代表0到9之间的数字。

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