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

使用Google Colab与TensorFlow构建分类模型时.predict方法输出异常

问题分析与修正方案

1. 核心问题拆解

你的代码存在三个关键问题,导致predict输出异常且不符合预期:

  • 最后一层输出维度与激活函数不匹配:单神经元用softmax必然输出1.0,因为softmax会将单值归一化为总和1
  • 标签格式未适配模型要求:原标签是1和4,未转换成模型可识别的0/1或对应编码格式
  • 损失函数与模型输出逻辑不匹配:当前损失函数和输出层的组合无法实现双类别概率输出

2. 修正方案(实现双类别概率输出)

以下是贴合你需求的完整修正步骤:

步骤1:调整标签格式

将原标签1和4映射为0和1(对应模型输出的两个索引,后续可反向映射回原类别):

labels = labels.map({1: 0, 4: 1})

步骤2:修正模型结构与编译参数

把最后一层改成2个神经元+softmax激活,搭配适配整数标签的损失函数:

model = tf.keras.Sequential([
    tf.keras.layers.Dense(256, activation='tanh', input_shape=(82,)),
    tf.keras.layers.Dense(2, activation='tanh'),  # 自动继承上一层维度,无需手动指定input_shape
    tf.keras.layers.Dense(2, activation='softmax')  # 2个神经元对应两个类别的概率输出
])

# 使用sparse_categorical_crossentropy,适配整数类型的标签
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

步骤3:训练与预测解析

增加训练轮次让模型充分学习,预测后将输出映射回原类别:

# 增加epochs,加入验证集监控训练效果
model.fit(x=features, y=labels, shuffle=True, epochs=20, validation_split=0.2)

# 预测并解析结果
predictions = model.predict(features)
for pred in predictions:
    # 索引0对应原类别1,索引1对应原类别4
    print(f"1: {pred[0]:.2f}, 4: {pred[1]:.2f}")

额外注意事项

  • 数据切片df.iloc[1:, 1:]会跳过第一行数据,确认你的表头是否在第一行,若第一行是有效数据,需改为df.iloc[:, 1:]
  • 若不想修改标签,可保留原标签1和4,只需将损失函数改为categorical_crossentropy,同时对标签做one-hot编码:
    labels = tf.keras.utils.to_categorical(labels - 1, num_classes=2)  # 减1让标签变为0和1,再转one-hot
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:47:22