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

基于Keras CNN的多标签专辑封面分类训练指标停滞问题咨询

可能的原因排查

首先排除你提到的两个可能性:

  • 指标实现没有问题:你用到的HammingLoss和subset_accuracy是多标签分类场景下的标准评估方式,代码实现符合官方和通用实现规范,不存在使用错误。
  • 基本可以排除Dying ReLU问题:如果是ReLU神经元大量死亡,你会观察到损失也同步陷入停滞甚至上升,不会出现损失仍在下降但指标不动的情况。

核心诱因和解决方案

1. 数据增强强度过高,引入无效噪声

你当前的增强策略里加入了垂直翻转、0.4幅度的旋转、最高0.6倍的缩放,而专辑封面本身是有固定语义方向的,垂直翻转、大角度旋转会把封面文字、构图完全打乱,属于无意义的噪声,反而会阻碍模型学习有效特征。
调整建议:

data_augmentation = keras.Sequential(
  [
    layers.RandomFlip("horizontal", input_shape=(img_height, img_width, 3)),
    layers.RandomRotation(0.1),
    layers.RandomZoom(0.1)
  ]
)

去掉垂直翻转,把旋转、缩放幅度控制在0.1以内,保留有意义的增强效果。

2. 固定0.5阈值不适配数据集分布

多标签分类默认用0.5作为分类阈值是非常粗糙的策略,如果你的数据集存在类别不平衡,样本量少的类别模型预测的最高概率可能都达不到0.5,永远不会被判定为正类,指标自然会陷入停滞。
调整建议:训练完成后针对验证集每个类别单独绘制PR曲线,选择F1值最高的点作为该类别的专属阈值,替换全局0.5阈值。

3. 类别不平衡导致损失被多数类主导

音乐风格分类数据集天然存在不平衡问题,流行、摇滚类样本量通常远大于爵士、嘻哈类,普通的二元交叉熵损失会被多数类主导,模型只需要猜对多数类就能拿到不错的损失值,不会继续优化少数类的预测效果。
调整建议:

  • 统计每个类别的样本量,给损失函数加上类别权重,样本量越少权重越高
  • 换成Focal Loss作为损失函数,自动降低易分类样本的权重,让模型更关注难分类的少数样本:
def focal_loss(y_true, y_pred, alpha=0.8, gamma=2):
    y_pred = tf.clip_by_value(y_pred, 1e-7, 1 - 1e-7)
    cross_entropy = -y_true * tf.math.log(y_pred) - (1 - y_true) * tf.math.log(1 - y_pred)
    loss = alpha * tf.pow(1 - y_pred, gamma) * cross_entropy
    return tf.reduce_mean(loss)

编译模型时用该损失替换默认的binary_crossentropy。

4. 模型容量不足缺少正则化

你当前的自定义卷积模型容量有限,且没有加入正则化策略,容易在学完基础特征后进入瓶颈,同时可能发生轻微过拟合,导致指标不再提升。
调整建议:

  • 在每个卷积层和全连接层后加入BatchNormalization层加速收敛,加入Dropout层防止过拟合
  • 条件允许的情况下改用迁移学习,加载ResNet50、EfficientNet等在ImageNet上预训练的主干网络,冻住底层权重后训练分类头,特征提取能力会远高于自定义的小模型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:27:00