Keras调用model.evaluate评估ViT模型时准确率超100%原因
问题根因
- 你在模型编译阶段错误配置了评估指标:将
keras.metrics.SparseCategoricalCrossentropy(稀疏分类交叉熵,属于损失类指标,取值范围为0到正无穷)错误命名为accuracy,没有添加真正的分类准确率计算逻辑。你日志里所有标注为accuracy的数值本质都是交叉熵损失值,不是0~1区间的预测正确比例,乘以100换算成百分比自然会出现超过100%的异常结果,训练阶段显示的3.8、6.5、10.44这类"准确率"数值全是交叉熵值。 - TopK准确率配置完全无效:你的任务总类别数仅为2(代码中定义
no_classes = 2),却配置了SparseTopKCategoricalAccuracy(5, name="top-5-accuracy"),要求取预测概率最高的5个类别判断是否包含真实标签——总类别数不足5个时,无论模型输出什么结果,该指标永远为1.0,和你日志里全程top-5准确率固定为100%的现象完全吻合,这个指标没有任何参考价值。 - 连带异常:你设置的模型检查点回调监控的是
val_accuracy,由于该值本质是验证集交叉熵而非验证准确率,回调保存的权重根本不是验证集表现最优的模型权重,完全不符合保存最优模型的设计预期。
修复方案
将model.compile中的metrics配置替换为符合任务要求的正确指标即可,2分类任务的正确配置参考如下:
model.compile( optimizer=optimizer, loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=[ keras.metrics.SparseCategoricalAccuracy(name="accuracy"), keras.metrics.SparseTopKCategoricalAccuracy(k=2, name="top-2-accuracy"), ], )
修改后重新训练,日志中的accuracy指标会稳定落在01区间,乘以100后就是正常范围0100%的分类准确率,不会再出现数百 percent 的异常值,模型检查点回调也能正常基于验证准确率保存最优权重。
内容的提问来源于stack exchange,提问作者Md. Muhtadir Rahman
相关产品推荐
相关产品推荐

