1

我正在尝试实现一个残差网络来对项目的 CIFAR10 数据集上的图像进行分类,并且我有一个工作模型,该模型的准确度呈对数增长,但验证准确度处于稳定状态。我在大多数层之后使用了批量标准化和 relu,最后使用了 softmax。

这是我的数据拆分:

(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

这是我编译和训练模型的代码

resNet50.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
resNet50.fit(train_images, train_labels, epochs=EPOCHS, validation_data=(test_images, test_labels))

在此处输入图像描述

在此处输入图像描述

什么可能导致这个验证平台,什么可以改进我的模型?

预先感谢您的反馈和评论。

4

1 回答 1

1

这是一个很常见的问题,就是过拟合的一种形式。

我邀请您阅读 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 所著的《深度学习》一书,尤其是本章(免费访问),内容丰富。

简而言之,您似乎选择了一个模型(ResNet50 + 默认训练参数)对您的问题和数据容量太大。如果您选择一个过于简单的模型,您将获得非常接近彼此的训练和评估曲线,但性能却比您所能达到的更差。如果你选择了一个过于复杂的模型(就像这里的情况一样),你可以在训练数据上达到更好的性能,但 eval 不会处于同一水平,甚至可能非常糟糕。这被称为训练集的过度拟合

您想要的是最佳中间点:评估数据的最佳性能是在模型复杂度刚刚过拟合之前找到的:您希望两条性能曲线彼此接近,但两者都应该尽可能好。

所以你需要减少你的模型的容量来解决你的问题。有不同的方法可以做到这一点,它们在减少过度拟合和降低火车性能方面都不会同样有效。如果可以的话,最好的方法通常是添加更多的训练数据。如果你不能,接下来要添加的好东西是正则化,例如数据增强、dropout、L1 或 L2 正则化以及提前停止。如果您的验证性能在某个时候开始下降,而不仅仅是停滞不前,最后一个特别有用。这不是你的情况,所以它不应该是你的第一首歌。

如果正则化还不够,那就试试学习率,或者书中提到的其他参数。您应该能够使 ResNet50 本身在 Cifar10 上工作得比这更好,但也许它不是那么微不足道。

于 2020-03-27T17:15:03.780 回答