- 使用 Keras 进行深度学习教程
- 使用 Keras 进行深度学习 - 首页
- 使用 Keras 进行深度学习 - 简介
- 深度学习
- 项目设置
- 导入库
- 创建深度学习模型
- 编译模型
- 准备数据
- 训练模型
- 评估模型性能
- 在测试数据上进行预测
- 保存模型
- 加载模型进行预测
- 结论
- 使用 Keras 进行深度学习资源
- 使用 Keras 进行深度学习 - 快速指南
- 使用 Keras 进行深度学习 - 有用资源
- 使用 Keras 进行深度学习 - 讨论
使用 Keras 进行深度学习 - 深度学习
如引言中所述,深度学习是使用大量数据训练人工神经网络的过程。训练完成后,网络将能够对未见过的数据进行预测。在进一步解释深度学习是什么之前,让我们快速回顾一下神经网络训练中使用的一些术语。
神经网络
人工神经网络的想法源于我们大脑中的神经网络。一个典型的神经网络由三层组成——输入层、输出层和隐藏层,如下图所示。
这也被称为浅层神经网络,因为它只包含一层隐藏层。您可以在上述架构中添加更多隐藏层以创建更复杂的架构。
深度网络
下图显示了一个包含四个隐藏层、一个输入层和一个输出层的深度网络。
随着网络中隐藏层的数量增加,其训练在所需的资源和完全训练网络所需的时间方面变得更加复杂。
网络训练
定义网络架构后,您需要对其进行训练以进行某些类型的预测。训练网络是一个为网络中每个连接找到合适权重的过程。在训练期间,数据通过各个隐藏层从输入层流向输出层。由于数据始终从输入到输出单向移动,因此我们将此网络称为前馈网络,并将数据传播称为前向传播。
激活函数
在每一层,我们计算输入的加权和并将其馈送到激活函数。激活函数为网络引入了非线性。它只是一个将输出离散化的数学函数。一些最常用的激活函数是 sigmoid、双曲正切 (tanh)、ReLU 和 Softmax。
反向传播
反向传播是一种用于监督学习的算法。在反向传播中,误差从输出层反向传播到输入层。给定一个误差函数,我们计算误差函数相对于分配给每个连接的权重的梯度。梯度的计算从网络向后进行。首先计算最后一层权重的梯度,最后计算第一层权重的梯度。
在每一层,梯度的部分计算都会在计算前一层的梯度时重复使用。这称为梯度下降。
在本项目教程中,您将定义一个前馈深度神经网络,并使用反向传播和梯度下降技术对其进行训练。幸运的是,Keras 为我们提供了所有高级 API 来定义网络架构并使用梯度下降对其进行训练。接下来,您将学习如何在 Keras 中执行此操作。
手写数字识别系统
在这个小型项目中,您将应用前面描述的技术。您将创建一个深度学习神经网络,该网络将接受训练以识别手写数字。在任何机器学习项目中,第一个挑战是收集数据。特别是对于深度学习网络,您需要海量数据。幸运的是,对于我们试图解决的问题,有人已经创建了一个用于训练的数据集。这称为 mnist,作为 Keras 库的一部分提供。该数据集包含多个 28x28 像素的手写数字图像。您将在该数据集的主要部分上训练您的模型,其余数据将用于验证您训练的模型。
项目描述
mnist 数据集包含 70000 张手写数字的图像。此处复制了一些示例图像以供参考
每张图像的大小为 28 x 28 像素,总共 768 个不同灰度级别的像素。大多数像素倾向于黑色阴影,而只有少数像素倾向于白色。我们将这些像素的分布放入数组或向量中。例如,典型数字 4 和 5 图像的像素分布如下图所示。
每张图像的大小为 28 x 28 像素,总共 768 个不同灰度级别的像素。大多数像素倾向于黑色阴影,而只有少数像素倾向于白色。我们将这些像素的分布放入数组或向量中。例如,典型数字 4 和 5 图像的像素分布如下图所示。
显然,您可以看到像素的分布(特别是那些倾向于白色色调的像素)有所不同,这区分了它们所代表的数字。我们将这 784 个像素的分布作为输入馈送到我们的网络。网络的输出将包含 10 个类别,表示 0 到 9 之间的数字。
我们的网络将包含 4 层——一层输入层、一层输出层和两层隐藏层。每个隐藏层将包含 512 个节点。每一层都完全连接到下一层。当我们训练网络时,我们将计算每个连接的权重。我们通过应用前面讨论的反向传播和梯度下降来训练网络。