如何使用 Tensorflow 在网络中使用 dropout 来减少过度拟合?

tensorflowserver side programmingprogramming

可以使用 dropout 技术使用 Tensorflow 来减少过度拟合,其中创建一个由 Rescaling 层和作为其层的增强数据组成的顺序模型。

阅读更多: 什么是 TensorFlow,以及 Keras 如何与 TensorFlow 配合使用来创建神经网络?

我们将使用 Keras Sequential API,它有助于构建一个顺序模型,该模型用于处理简单的层堆栈,其中每个层只有一个输入张量和一个输出张量。

包含至少一个层的神经网络称为卷积层。我们可以使用卷积神经网络构建学习模型。 

使用 keras.Sequential 模型创建图像分类器,并使用 preprocessing.image_dataset_from_directory 加载数据。数据有效地从磁盘加载。识别过度拟合并应用技术来缓解它。这些技术包括数据增强和 dropout。有 3700 朵花的图像。该数据集包含 5 个子目录,每个类有一个子目录。它们是:

雏菊、蒲公英、玫瑰、向日葵和郁金香。

我们使用 Google Colaboratory 运行以下代码。Google Colab 或 Colaboratory 有助于在浏览器上运行 Python 代码,并且不需要任何配置,可以免费访问 GPU(图形处理单元)。Colaboratory 建立在 Jupyter Notebook 之上。

当训练示例数量较少时,模型会从训练示例中的噪声或不需要的细节中学习。这会对模型在新示例上的性能产生负面影响。

由于过度拟合,模型将无法在新数据集上很好地概括。有很多方法可以避免过度拟合。我们可以使用 drop out 技术来克服过度拟合。通过在网络中引入 dropout 可以减少过度拟合。这被认为是一种正则化形式。这有助于将模型暴露给数据的更多方面,从而帮助模型更好地泛化。

当将 dropout 应用于某个层时,它会在训练过程中随机从该层中删除一些输出单元。这是通过将激活函数设置为 0 来实现的。Dropout 技术将分数作为输入值(如 0.1、0.2、0.4 等)。这个数字 0.1 或 0.2 基本上表示 10% 或 20% 的输出单元是随机来自应用层。

数据增强通过借助随机变换对现有示例进行增强,从现有示例中生成额外的训练数据,从而产生看起来可信的图像。以下是一个例子:

示例

print("The dropout technique to reduce overfitting")
model = Sequential([
   data_augmentation,
   layers.experimental.preprocessing.Rescaling(1./255),
   layers.Conv2D(16, 3, padding='same', activation='relu'),
   layers.MaxPooling2D(),
   layers.Conv2D(32, 3, padding='same', activation='relu'),
   layers.MaxPooling2D(),
   layers.Conv2D(64, 3, padding='same', activation='relu'),
   layers.MaxPooling2D(),
   layers.Dropout(0.2),
   layers.Flatten(),
   layers.Dense(128, activation='relu'),
   layers.Dense(num_classes)
])

代码来源 −https://www.tensorflow.org/tutorials/images/classification

输出

The dropout technique to reduce overfitting

解释

  • 使用layers.Dropout创建一个神经网络。
  • 创建一个具有三层的顺序模型。
  • 下一步是使用增强图像训练该数据集。

相关文章