如何在TensorFlow中使用dropout来减少过拟合?


TensorFlow可以使用dropout技术来减少过拟合,该技术创建一个包含重缩放层和增强数据的顺序模型。

阅读更多: 什么是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之上。

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

由于过拟合,模型将无法在新数据集上很好地泛化。有许多方法可以避免过拟合。我们可以使用dropout技术来克服过拟合。通过在网络中引入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://tensorflowcn.cn/tutorials/images/classification

输出

The dropout technique to reduce overfitting

解释

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

更新于:2021年2月22日

浏览量:199

启动您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.