You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow人行横道图像分类模型预测全为0%问题排查求助

人行横道二分类模型测试全0%问题的排查与解决

先从最容易忽略的数据预处理一致性入手,这是此类问题的高发原因:

  • 检查测试图像的预处理流程是否和训练阶段完全对齐:包括图像尺寸缩放(比如训练时用target_size=(224,224),测试时必须同步)、归一化(如rescale=1./255)、通道顺序(RGB/BGR)、是否转灰度等。如果训练用了ImageDataGenerator做增强,测试时也要用相同的预处理逻辑,不能直接读图就喂模型。
  • 确认类别映射和标签解读是否正确:训练时class_mode='binary'对应的类别顺序(比如"有人行横道"是1,"无"是0),测试时要保持一致;模型输出的是sigmoid概率值,要明确是对应哪一类的概率,别搞反了判断逻辑。
  • 检查测试图像的加载是否正常:有没有出现图像损坏、通道数不对(比如训练用RGB,测试读成了单通道灰度)的情况。

数据集相关优化

针对你怀疑的数据集规模问题,可从这几点调整:

  • 验证训练/验证集与测试集的分布差异:比如训练集都是特定场景(晴天、正面视角),测试集是完全不同的场景(雨天、侧面视角),这种分布偏移会导致模型完全失效。可以随机抽取训练集和测试集的图像做可视化对比,确认特征分布是否一致。
  • 强化数据增强的强度:如果当前增强参数太保守(比如只做了水平翻转),可以增加随机旋转(±30°)、缩放(0.8-1.2倍)、亮度/对比度调整、随机裁剪等操作,让模型学到更通用的特征。
  • 检查类别平衡性:如果训练集里"无行人横道"的样本占比极高(比如90%以上),模型会倾向于输出0来获得高准确率。这种情况要设置class_weight(比如class_weight={0:1, 1:5})来平衡损失,强制模型关注少数类。

模型结构与训练优化

不想用预训练模型的话,可从这些方向调整:

  • 简化模型结构:如果当前CNN层数过多、参数过大,容易过拟合到训练集的噪声,导致测试失效。可以减少卷积层的数量,或者降低每个卷积层的滤波器数量(比如从64降到32)。
  • 添加正则化机制:在卷积层或全连接层加入L2正则化(比如kernel_regularizer=tf.keras.regularizers.L2(0.01)),或者添加Dropout层(比如在卷积后加Dropout(0.2)),抑制过拟合。
  • 调整训练参数:检查学习率是否合适,过高会导致模型震荡,过低会让模型收敛到局部最优。可以尝试用学习率衰减(比如ReduceLROnPlateau回调),或者从1e-4开始调整学习率。
  • 确认输出层配置:二分类必须用单个神经元+sigmoid激活,损失函数用BinaryCrossentropy,别误用softmax或CategoricalCrossentropy,否则输出逻辑会混乱。
  • 检查权重加载:测试时要确保加载的是训练完成后的最终权重,而不是初始随机权重或者中间epoch的权重。

测试代码排查

  • 关闭训练模式:如果模型里有Dropout或BatchNormalization层,测试时必须设置model.trainable=False,或者用model.predict()(自动切换到推理模式),否则BatchNormalization会用测试数据的统计量,导致输出异常。
  • 验证输出解读:比如model.predict(img)返回的是[[0.02]],这是"有人行横道"的概率为2%,"无"为98%,别直接把这个值当成类别标签,要设置阈值(比如0.5)来判断类别。

内容的提问来源于stack exchange,提问作者Thewatcher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:55:41