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

使用CNN(EfficientNetB7)训练图像分类模型时准确率为0,求排查错误

错误原因及修正方案

  • 输出层与类别数不匹配
    数据集有3类,但最后一层Dense仅设置1个单元,搭配softmax激活后,输出永远为1,完全无法区分类别。需修改为:

    model=tf.keras.layers.Dense(3, activation="softmax")(model)
    
  • 标签编码与损失函数不匹配
    当前使用categorical_crossentropy损失函数,要求标签为one-hot编码格式,但代码中未对加载的trainY和testY做编码处理,需添加:

    trainY = to_categorical(trainY, num_classes=3)
    testY = to_categorical(testY, num_classes=3)
    

    若不想使用one-hot编码,也可将损失函数改为sparse_categorical_crossentropy,此时标签可保留原始整数形式(0、1、2)。

  • 输入通道维度缺失
    模型定义的输入形状为(224,224,1),但你注释掉了trainX = np.expand_dims(trainX, axis=3),若原始trainX是灰度图(形状为(样本数,224,224)),则输入维度不匹配,会导致模型无法正确提取特征。需取消注释该行,确保输入形状为(样本数,224,224,1)。

  • 模型初始化的优化建议
    设置weights=None会让模型完全随机初始化,收敛难度大。若数据集与ImageNet分布类似,可尝试使用预训练权重:

    efficient = EfficientNetB7(weights="imagenet", include_top=False, input_shape=(224,224,3))
    

    注意此时需将输入图像转为3通道RGB格式;若必须用灰度图,可保持随机初始化,但需适当增加训练轮数或调整学习率。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:20:12