使用 Keras 进行深度学习:使用 Keras 训练神经网络 [附代码]

已发表: 2020-12-24

Keras 是一个 Python 库,它提供了一个与神经网络和深度学习框架一起工作的 API。 Keras 提供了在 Python 中处理各种深度学习应用程序时非常方便的函数和模块。

在本教程结束时,您将掌握以下知识:

  1. 什么是 Keras?
  2. Keras API
  3. 在 Keras 中训练神经网络

目录

什么是 Keras?

要进行深度学习,早期使用最多的库是 Tensorflow 1.x,对于初学者来说很难处理。 它需要大量的编码才能制作一个基本的 1 层网络。 然而,使用 Keras,制作神经网络结构然后训练和跟踪它的完整过程变得非常容易。

Keras 是一个高级 API,可以在 Tensorflow、Theano 和 CNTK 后端运行。 它使我们能够使用高级和用户友好的 API 使用神经网络运行实验。 它还能够在 CPU 和 GPU 上运行。

Keras API

Keras 有 10 个不同的 API 模块,用于处理神经网络的建模和训练。 让我们回顾一下它们,以了解所有 Keras 所提供的功能。

楷模

Models API 提供了通过添加/删除层来构建复杂神经网络的功能。 该模型可以是顺序的,这意味着层将通过单个输入和输出顺序堆叠。 该模型也可以是功能性的,意思是,具有完全可定制的模型。 这是行业中最常用的。

API 还具有训练模块,该模块提供编译模型以及优化器和损失函数的方法、拟合模型的方法、评估和预测新数据的方法。 此外,它还具有对批量数据进行训练、测试和预测的方法。 Models API 也有模型的保存和序列化。

图层

层是任何神经网络的构建块。 Layers API 提供了一整套用于构建神经网络架构的方法。 Layers API 具有 Base Layer 类,其中包含使用自定义权重和初始化器构建自定义层所需的方法。

它包含 Layer Activations 类,该类由各种激活函数组成,例如 ReLU、Sigmoid、Tanh、Softmax 等。Layer Weight Initializers 类提供了使用不同方式初始化权重的方法。

它还包含核心层类,该类包含添加核心层所需的类,如密集层、激活层、嵌入层等。卷积层类提供了各种方法来添加不同类型的卷积层。 Pooling Layers 类包含不同类型的池化所需的方法,例如 Max Pooling、Average Pooling、Global Max Pooling 和 Global Average Pooling。

回调

回调是跟踪模型训练过程的一种方式。 启用回调后,可以在一个时期或批次结束之前或之后执行各种操作。 使用回调,您可以:

  • 通过在 TensorFlow Board 中记录指标来监控训练指标
  • 定期将模型保存到磁盘
  • 提前停止,以防在特定时期后损失没有显着减少
  • 在训练期间查看模型的内部状态和统计信息

数据集预处理

数据通常是原始格式,位于排列好的目录中,需要在输入模型进行拟合之前进行预处理。 Image Data Preprocessing 类有许多这样的专用功能。 例如,图像数据需要在数值数组中,我们可以使用 img_to_array 函数。 或者,如果图像存在于目录和子文件夹中,我们可以使用 image_dataset_from_directory 函数。

数据预处理 API 也有时间序列数据和文本数据的类。

优化器

优化器是任何神经网络的支柱。 每个神经网络都致力于优化损失函数以找到最佳的预测权重。 有多种优化器遵循略有不同的技术来找到最佳权重。 所有这些优化器都在 Optimizers API 中可用——SGD、RMSProp、Adam、Adadelta、Adagrad、Admax、Nadal、FTRL。

损失

编译模型时需要指定损失函数。 该损失函数将由优化器进行优化,该优化器也作为 compile 方法中的参数传递。 三个主要损失类别是:概率损失、回归损失、铰链损失。

指标

每个 ML 模型都使用指标来量化其在测试数据上的性能。 度量与损失函数类似,不同之处在于它们用于测试数据。 有许多可用的准确度指标,例如准确度、二元准确度、分类准确度等。它还包含概率指标,例如二元交叉熵、分类交叉熵等。还有一些用于检查误报/负数的指标,例如 AUC、精度、召回率等

除了这些分类指标外,它还具有回归指标,如均方误差、均方根误差、平均绝对误差等。

另请阅读: Keras 和 TensorFlow 是什么

Keras 应用程序

Keras 应用程序类由一些预构建的模型和预训练的权重组成。 这些预训练模型用于迁移学习过程。 这些预训练模型根据架构、层数、可训练权重等而有所不同。其中一些是 Xception、VGG16、Resnet50、MobileNet 等。

使用 Keras 训练神经网络

让我们考虑一个简单的数据集,例如 Keras 的数据集类中可用的 MNIST。 我们将制作一个简单的顺序卷积神经网络,用于对数字 0-9 的手写图像进行分类。

#加载数据集

keras.datasets导入mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

通过将每个像素除以 255 来规范化数据集。此外,需要将图像转换为 4 维,然后再将其输入 CNN 模型。

x_train = x_train.astype( 'float32' )
x_test = x_test.astype( 'float32' )
x_train /= 255
x_test /= 255

x_train = X_train.reshape(X_train.shape[ 0 ], 28 , 28 , 1 )
x_test = X_test.reshape(X_test.shape[ 0 ], 28 , 28 , 1 )

在将类输入模型之前,我们需要对其进行标记编码。 我们将通过使用 Keras 的 Utils 类来做到这一点。

keras.utils导入to_categorical


y_train = to_categorical(y_train, 10 )
y_test = to_categorical(y_test, 10 )

现在,我们可以开始使用 Sequential API 创建模型。

keras.models导入顺序
from keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout model = Sequential() model.add(Conv2D(filters= 32 , kernel_size=( 5 , 5 ), activation= 'relu' , input_shape=x_train.shape[ 1 :]))
model.add(MaxPool2D(pool_size=( 2 , 2 )))
model.add(辍学(率= 0.25 ))
model.add(Conv2D(filters= 64 , kernel_size=( 3 , 3 ), activation= 'relu' ))
model.add(MaxPool2D(pool_size=( 2 , 2 )))
model.add(辍学(率= 0.25 ))
model.add(展平())
model.add(密集( 256 ,激活= 'relu' ))
model.add(辍学(率= 0.5 ))
model.add(密集( 10 ,激活= 'softmax' ))

在上面的代码中,我们声明了一个顺序模型,然后向它添加了多个层。 卷积层,然后是 Max Pooling 层,然后是用于正则化的 dropout 层。 稍后我们使用 flatten 层对输出进行展平,最后一层是具有 10 个节点的全连接密集层。

接下来,我们需要通过传递损失函数、优化器和度量来编译它。

模型.编译(
损失= 'categorical_crossentropy'
优化器= '亚当'
指标=[ '准确性' ]
)

现在我们需要从原始图像中添加增强图像以增加模型的训练集和准确性。 我们将使用 ImageDataGenerator 函数来做到这一点。

keras.preprocessing.image导入ImageDataGenerator

数据生成 = 图像数据生成器(
旋转范围= 10 ,
缩放范围= 0.1 ,
width_shift_range= 0.1 ,
height_shift_range= 0.1
)

现在模型已编译,图像已增强,我们可以开始训练过程。 由于我们在上面使用了图像数据生成器,因此我们将使用 fit_generator 方法,而不仅仅是 fit。

时代 = 3
批量大小 = 32
history = model.fit_generator( datagen.flow(x_train, y_train, batch_size=batch_size), epochs=epochs,
validation_data=(x_test, y_test), steps_per_epoch=x_train.shape[ 0 ]//batch_size )

训练过程的输出如下:

3现在模型已经过训练,可以通过在看不见的测试数据上运行它来进行评估。

相关阅读:使用 Keras 的深度学习和神经网络

在你走之前

在本教程中,我们看到了 Keras 的结构以及如何轻松构建复杂的神经网络。 Keras 现在被包裹在 Tensorflow 2.x 下,这赋予了它更多的功能。 尝试更多此类示例并探索 Keras 的功能和特性。

如果您有兴趣了解有关机器学习的更多信息,请查看 IIIT-B 和 upGrad 的机器学习和人工智能 PG 文凭,该文凭专为工作专业人士设计,提供 450 多个小时的严格培训、30 多个案例研究和作业、IIIT- B 校友身份、5 个以上实用的实践顶点项目和顶级公司的工作协助。

引领人工智能驱动的技术革命

来自 IIIT 班加罗尔的机器学习和人工智能 PG 文凭
了解更多