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

模型转TFLite量化后仅识别0类,1类无法分类的问题求助

问题分析与解决方案

核心错误:二分类输出的预测逻辑错误

你的模型最后一层是Dense(1, activation='sigmoid'),属于二分类单输出结构,输出值范围是[0,1],代表样本属于类别1的概率。但你在TFLite推理时错误使用了np.argmax():

prediction_classes = np.argmax(tflite_model_predictions, axis=1)

由于输出张量形状为(74485, 1),每个样本仅对应1个输出值,argmax在axis=1维度上只能返回0,导致所有样本都被判定为类别0,这就是1类完全无法识别的直接原因。

修正后的预测代码

将预测逻辑改为基于阈值的二分类判断(通常取0.5作为分界):

# 替换原有的prediction_classes计算逻辑
prediction_classes = (tflite_model_predictions > 0.5).astype(int).flatten()
  • >0.5:将概率大于0.5的样本判定为类别1
  • astype(int):将布尔结果转为0/1整数标签
  • flatten():将形状从(74485,1)转为(74485,),与y_test的形状匹配

额外验证与优化建议

  1. 量化模型一致性检查:
    确保加载的tflite_qaware_model.tflite是通过converter.optimizations = [tf.lite.Optimize.DEFAULT]生成的量化模型,且保存路径正确。
  2. 批量推理内存优化:
    一次性将输入张量resize到74485样本可能占用较多内存,建议改用批量推理:
    interpreter = tf.lite.Interpreter(model_path="tflite_qaware_model.tflite")
    interpreter.allocate_tensors()
    input_details = interpreter.get_input_details()
    output_details = interpreter.get_output_details()
    
    batch_size = 32
    prediction_classes = []
    for i in range(0, len(X_test_numpy), batch_size):
        batch = X_test_numpy[i:i+batch_size]
        interpreter.set_tensor(input_details[0]['index'], batch)
        interpreter.invoke()
        batch_preds = interpreter.get_tensor(output_details[0]['index'])
        prediction_classes.extend((batch_preds > 0.5).astype(int).flatten())
    prediction_classes = np.array(prediction_classes)
    
  3. 输入数据匹配验证:
    确保X_test_numpy的预处理逻辑和训练时完全一致,比如是否做了归一化/标准化操作(若训练阶段执行过)。

修正结果验证

修正后重新生成混淆矩阵和分类报告,结果应与原模型的准确率(99%+)接近,可正常识别类别1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:33:28