Keras中Sequential模型训练时准确率超过1的原因排查
准确率超过1的异常原因及解决方法
准确率超出0-1区间的问题,主要和你使用的多GPU分布式策略以及指标与损失函数不匹配有关:
分布式策略的指标汇总逻辑问题
使用MirroredStrategy双GPU训练时,部分TensorFlow版本中,默认的accuracy指标会把每个GPU单独计算出的准确率直接相加,而非取平均值。比如两个GPU各自的准确率为0.6,汇总后就会得到1.2,自然超出正常范围。指标与损失函数不兼容
你用的损失函数是SparseCategoricalCrossentropy,适用于整数型稀疏标签;但metrics里写的['accuracy']会默认调用CategoricalAccuracy——这个指标是为one-hot编码标签设计的。指标与标签格式不匹配,会导致计算逻辑混乱,最终出现准确率数值异常。
解决方法
将指标替换为适配稀疏标签的SparseCategoricalAccuracy即可,修改后的编译代码如下:
from tensorflow.keras.metrics import SparseCategoricalAccuracy model.compile( optimizer=optimizers.Adam(), loss=losses.SparseCategoricalCrossentropy(from_logits=True), metrics=[SparseCategoricalAccuracy()] )
这样既能适配分布式训练的指标汇总逻辑,又能匹配你的标签格式,准确率会回到0-1的正常区间。
内容的提问来源于stack exchange,提问作者Viknesh TPK
相关产品推荐
相关产品推荐

