TensorFlow v1低阶分类模型损失恒为0、准确率100%问题咨询
TensorFlow v1猫狗二分类损失/准确率异常问题解答
类型转换操作的关联性判断
你为tf_test_dataset指定dtype=tf.float32的操作本身和当前异常无直接关联,该操作仅用于对齐MatMul算子对输入张量的浮点类型要求,属于正常的兼容性修复操作。除非你在做类型转换时同步错误修改了标签数值、或错位赋值了特征/标签张量,否则不需要怀疑这步操作是异常诱因。
异常排查方案
- 检查标签处理逻辑
优先确认标签映射、独热编码逻辑是否存在错误:比如所有样本标签被赋值为同一个值、标签维度与模型输出维度不匹配、甚至特征与标签张量被颠倒赋值。你可以在训练循环中插入tf.print语句,输出每一步的真实labels、模型输出logits、损失计算中间值,判断是否存在标签和模型输出天然匹配、损失输入被固定为0的情况。 - 校验损失函数实现
如果你是自定义实现交叉熵损失,检查是否存在符号写反、reduce_sum/reduce_mean降维维度错误、甚至损失被硬编码为固定值0的问题。如果调用TF内置损失接口,确认logits和labels参数是否传反,是否错误配置了logits已过softmax激活的参数。 - 排查数据集泄露/读取错误
确认是否存在测试集混入训练集、所有样本特征被读取为完全相同张量的问题,这类问题会导致模型只要输出固定值就能拟合全部样本。你可以随机打印若干样本的特征和对应标签,验证特征与标签的对应关系是否正确、样本特征是否存在大规模重复。 - 核对准确率计算逻辑
损失恒为0伴随准确率100%的常见诱因还包括准确率计算逻辑错误:比如预测值与标签的相等判断逻辑恒成立、argmax取值维度错误,导致无论模型输出是什么,准确率计算结果都为1。
内容的提问来源于stack exchange,提问作者Jewgah
相关产品推荐
相关产品推荐

