Keras实现LeNet:训练/验证准确率高但测试准确率极低问题排查
问题原因分析
类别覆盖不完整+输出维度不匹配
训练和验证集仅包含7类数字,模型训练时只学习了这7类的特征,输出层神经元数量应为7个。但测试集包含10类,其中3类是模型从未见过的;更关键的是,测试集的标签包含7、8、9(对应类别索引7、8、9),而模型只能输出0-6这7个类别的概率分布,sparse_categorical_crossentropy在计算时,标签值超出模型输出的类别索引范围,会直接导致损失异常升高,同时模型对未见过的3类样本完全无法正确分类,最终拉低整体测试准确率。数据预处理不一致
检查tf.keras.utils.image_dataset_from_directory加载训练集和测试集时的参数是否完全一致:比如是否都设置了相同的image_size=(32,32)、color_mode="rgb",是否都添加了rescale=1./255这类归一化操作。如果测试集没有做和训练集相同的预处理(比如像素值未归一化),模型输入分布和训练时偏差极大,也会导致测试表现崩盘。测试集类别分布的影响
即使忽略未见过的3类,测试集中这3类的样本占比如果较高(比如每类约10%,三类合计30%),加上模型对这部分样本全错,再加上对已见过的7类可能也有分类误差,最终准确率会被拉到极低水平,和你给出的0.0656吻合。
内容的提问来源于stack exchange,提问作者Dhruva Sundararajan
相关产品推荐
相关产品推荐

