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

TensorFlow模型对所有输入均输出同一类别标签的问题求助

模型输出固定类别问题的排查与修复

核心问题分析

模型对所有输入输出同一类别,训练损失维持在3.5左右(对应43类交叉熵的初始近似值)且下降极慢,主要由以下代码错误及配置问题导致:

1. 损失函数参数冲突

输出层使用了softmax激活,但编译时CategoricalCrossentropy设置了from_logits=True——该参数仅适用于未经过softmax的原始输出(logits),此设置会直接导致损失计算逻辑错误,模型无法正常学习。

修正代码:

model.compile(
    loss=tf.keras.losses.CategoricalCrossentropy(from_logits=False),  # 改为False或直接删除该参数
    optimizer='sgd',
    metrics=['accuracy']
)

2. 预处理归一化重复操作

rgb2gray函数返回的图像数据范围已经是0到1的浮点数,后续再除以255会把特征值压缩到0~1/255的极小范围,导致模型梯度更新几乎停滞。

修正代码:

def reshape_and_grayscale(dataset):
    i = 0
    for data in dataset :
        image_data = data[0]
        
        if len(image_data.shape) > 2 :
            image_data = rgb2gray(image_data)
            
        image_data = resize(image_data, image_shape)
        # 移除多余的除以255操作,rgb2gray已完成归一化
        dataset[i][0] = image_data
        i += 1

3. 标签数据类型不匹配

tf.one_hot返回的是Tensor对象,直接赋值给数组会导致训练时数据批量处理异常,需转换为numpy数组。

修正代码:

y[i] = tf.one_hot(int(data[1]), depth=number_label).numpy()

4. 训练配置不足

  • 训练轮次过少:仅训练2轮无法让模型进入有效学习阶段,建议增加到10~20轮;
  • SGD学习率偏低:默认0.01的学习率对于该模型收敛过慢,可尝试提高至0.1,或改用Adam优化器加速训练。

修正后的训练配置示例:

model.compile(
    loss=tf.keras.losses.CategoricalCrossentropy(),
    optimizer=tf.keras.optimizers.SGD(learning_rate=0.1),
    metrics=['accuracy']
)
history = model.fit(
    train_x, train_y,
    validation_data=(valid_x, valid_y),
    epochs=15
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:06:52