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

如何从CNN文本分类模型获取预测标签?模型仅返回0该如何解决

问题原因与解决方案

一、直接错误:预测标签的处理逻辑错误

你当前的输出层是Dense(1, activation='sigmoid'),对应二分类sigmoid输出的是单个0~1之间的概率值,不是2维的one-hot概率分布,所以np.argmax(y_sample)属于误用:

  • 对于只有1个元素的数组,np.argmax永远返回索引0,这是你所有输出都是0的直接原因。

正确的预测标签获取逻辑应该是设置阈值(通常用0.5)判断,替换对应代码即可:

X_sample = tokenizer.texts_to_sequences(df['stemmed'])
X_sample = pad_sequences(X_sample, maxlen=maxlentweet)
y_sample = model.predict(X_sample).flatten().tolist()
# 原错误代码删除,替换为以下逻辑:概率大于等于0.5判定为类别1,否则为类别0
result = [1 if prob >= 0.5 else 0 for prob in y_sample]
# 如果是单样本预测,直接用:
# result = 1 if y_sample[0] >= 0.5 else 0

print(result)

二、修正预测逻辑后仍全输出0的排查方向

  • 检查训练集标签分布:如果类别0占比极高(比如90%以上),模型会直接全部预测0来获得高准确率,此时需要做样本均衡处理,比如对类别1过采样、类别0欠采样,或者训练时传入类别权重:
    # 示例,可根据实际标签占比调整权重
    class_weight = {0: 1, 1: 5}
    model.fit(X_train, y_train, class_weight=class_weight, 其余参数保持不变)
    
  • Dropout比率设置过高:两个Dropout层都用了0.7,极易导致模型欠拟合,建议先降到0.2~0.3区间再逐步调整。
  • 确认训练是否充分:查看训练过程中损失和准确率的变化,如果损失没有收敛,适当增加训练轮次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:42:03