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

TensorFlow模型predict返回随机浮点数,未输出3类概率问题求助

问题描述

我的模型接收类似'USD'的输入并预测其类别,类别定义如下:

  • 0=book name
  • 1=currency
  • 2=security number

训练、验证及测试集的结构示例如下:

Value          Label
0   CAT_USD_CORP          0
1   USD                   1
2   US348595EV89          2
3   ATTR_IRT_LDN_ISD_ISD  0
4   CAD                   1
              ...   

我用以下代码训练并测试模型,运行正常且准确率良好:

model = tf.keras.Sequential([
  feature_layer,
  layers.Dense(128, activation='relu'),
  layers.Dense(128, activation='relu'),
  layers.Dropout(.1),
  layers.Dense(1)
])

model.compile(optimizer='adam',
              loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
              metrics=['accuracy'])

model.fit(train_ds,
          validation_data=val_ds,
          epochs=12)

loss, accuracy = model.evaluate(test_ds)
print("Accuracy", accuracy)

但输入值预测时,模型总是返回随机浮点数数组,而非三类类别的概率。例如:

  • model.predict(np.array(['USD'])) 返回 array([[1195770.]], dtype=float32)
  • model.predict(np.array(['US568A45EV89'])) 返回 array([[1938599.4]], dtype=float32)

预期模型返回包含3个概率值的数组,对应三个类别的概率。

解决方案

问题出在模型的输出层配置和损失函数选择上,属于多分类任务的典型配置错误,修改步骤如下:

  1. 调整输出层结构
    当前输出层仅1个神经元,对应二分类任务。需将输出层神经元数量改为3(匹配3个类别),并添加softmax激活函数,让输出的3个值成为总和为1的概率分布:
model = tf.keras.Sequential([
  feature_layer,
  layers.Dense(128, activation='relu'),
  layers.Dense(128, activation='relu'),
  layers.Dropout(.1),
  layers.Dense(3, activation='softmax')  # 修改:3个神经元 + softmax激活
])
  1. 更换损失函数
    多分类任务不能使用BinaryCrossentropy,需换成SparseCategoricalCrossentropy(因你的标签是整数形式,如0、1、2):
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(),
              metrics=['accuracy'])

若标签是one-hot编码形式,则用CategoricalCrossentropy,但根据数据集示例,标签为整数,SparseCategoricalCrossentropy更适配。

  1. 预测结果处理
    修改后,model.predict(np.array(['USD']))会返回类似array([[0.01, 0.97, 0.02]], dtype=float32)的结果,三个值分别对应类别0、1、2的概率。若需直接得到预测的类别索引,可使用np.argmax():
pred_probs = model.predict(np.array(['USD']))
pred_class = np.argmax(pred_probs, axis=1)  # 得到类别索引,如[1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:15:58