为什么添加随机像素会阻止我在 cnn 中的模型学习?

数据挖掘 机器学习 美国有线电视新闻网
2022-02-19 08:16:27

我正在使用一个非常简单的模型对 224x224 RGB 图像进行分类。

对于测试,我根据图像上部的单个固定像素的颜色标记了我的图像(2 个标签“绿色”或“红色”,每个 2,000 个图像)。

我的简单模型实现了非常高的精度和非常低的损失,直到我在图像的下部添加更多“随机”像素。

为什么我的模型变得混乱?

该模型可以轻松应对:

在此处输入图像描述

但是,当我在图像的下部添加更多像素时 - 它只能达到 50% 的准确度和高损失:

在此处输入图像描述

这些项目有点简单,但我正在研究一个我可以控制的简单图像结构。

def VerySimpleNet():
    model = keras.Sequential([
        keras.layers.Conv2D(16, kernel_size=3, activation=tf.nn.relu, input_shape=(224, 224, 3)),
        keras.layers.Dropout(0.4),
        keras.layers.Flatten(),
        keras.layers.Dense(3, activation=tf.nn.softmax)
    ])
return model

编辑 1

是否可以在数据科学问题中添加奖励以鼓励更多答案?

编辑 2

如果有人愿意在这个问题上与我进行更具互动性的聊天(电子邮件,txt?),我真的很感兴趣。

2个回答

我认为这里的问题是您试图将您对输入的了解与模型试图预测的内容联系起来。我建议尝试解释为什么您的模型会为图像提供某些输出。

不久前,我在阅读有关模型解释的信息时遇到了SHAP 。SHAP 的图像图应该能够缩小模型解释特定图像标签的原因。

SHAP Image_plot

这应该会让你弄清楚为什么你的模型会做出预测。

一种简单的解释是,添加随机噪声当然无济于事,而且足够多的噪声会降低您的模型性能。该模型最终可能会通过足够的训练时间、正确的设置等来解决它,但它必须筛选出如此多的噪音才能找到你隐藏的信号。

您有相对较少的实例(2000 个)相对复杂的输入(224x224x3 图像)。您的“随机”添加有很多机会实际上与标签相关。看起来适合训练集中的好功能无法在您的测试集中推广。

我将提供的最后一个解释是您在这里使用了卷积层,这意味着一定程度的空间不变性。它从一个 3x3x3 补丁中学到了什么,它对所有 3x3x3 补丁的学习都是一样的。但是您希望它了解有关特定单个像素的不同信息。它真的不能使用带有小内核的单个卷积层。也就是说,您的简单模型对于这个问题来说太简单了。堆叠更多卷积+池化层可能最终获得解决您的难题所需的空间专业化。