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

基于MobileNetV3的皮肤病多分类模型准确率偏低的优化咨询

皮肤病检测模型优化建议

一、数据层面优化

  • 精准平衡数据集:
    现有通用图像增强方式可针对性调整,比如增加随机裁剪病灶区域(若有标注)、MixUp/CutMix增强,提升样本多样性。同时人工校验小样本类别的标注质量,剔除标注错误的样本。
  • 继续扩充数据集:
    2500样本分21类,单类平均仅约120个样本,仍显不足。可整合同领域公开数据集(如ISIC皮肤病数据集),或引入医学文献中的弱标注图片;也可尝试用GAN生成小样本类别的合成数据,注意保证生成数据的医学真实性。
  • 优化验证集划分:
    采用分层抽样方式拆分训练/验证集,确保每个类别在两个集合中的分布一致,避免因验证集分布偏差导致的准确率评估失真。

二、模型结构与训练策略调整

  • 微调预训练模型:
    当前仅训练顶层分类层,预训练特征难以适配皮肤病的复杂分类任务。可解冻MobileNetV3的部分高层(如最后10-20层),用更小的学习率继续训练:
    base_model.trainable = True
    # 根据MobileNetV3实际结构调整,取倒数第N层之后的层可训练
    fine_tune_layer_index = len(base_model.layers) - 15
    for layer in base_model.layers[:fine_tune_layer_index]:
        layer.trainable = False
    
    # 重新编译,使用更小的学习率
    model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-5),
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])
    
    # 继续训练,基于之前的训练结果
    history_fine = model.fit(
        train_generator,
        epochs=25,
        initial_epoch=history.epoch[-1],
        validation_data=validation_generator,
        callbacks=[checkpoint_callback_model]
    )
    
  • 增强顶层分类器复杂度:
    当前仅用单层Dropout+Dense,可增加中间层提升拟合能力,同时加大Dropout比例抑制过拟合:
    model = models.Sequential([
        base_model,
        layers.GlobalAveragePooling2D(),
        layers.Dense(256, activation='relu'),
        layers.Dropout(0.4),
        layers.Dense(128, activation='relu'),
        layers.Dropout(0.3),
        layers.Dense(21, activation='softmax')
    ])
    
  • 换用更适配的预训练模型:
    尝试EfficientNet系列(如EfficientNetB2/B3),其在图像分类任务上的泛化能力优于MobileNetV3;若能获取医学图像预训练的模型(如ISIC数据集预训练模型),特征会更贴合皮肤病检测需求。
  • 使用加权损失函数:
    针对类别不平衡问题,给样本量少的类别设置更高的损失权重:
    import numpy as np
    
    # 计算每个类别的样本数
    class_counts = np.bincount(train_generator.classes)
    total_samples = len(train_generator.classes)
    num_classes = 21
    class_weights = {i: total_samples / (num_classes * count) for i, count in enumerate(class_counts)}
    
    # 训练时传入类别权重
    history = model.fit(
        train_generator,
        epochs=15,
        validation_data=validation_generator,
        callbacks=[checkpoint_callback_model],
        class_weight=class_weights
    )
    

三、训练过程调优

  • 增加训练轮数并加入早停:
    当前仅训练10轮,模型可能未收敛。增加至20-30轮,同时加入EarlyStopping回调,避免过拟合:
    from tensorflow.keras.callbacks import EarlyStopping
    
    early_stopping = EarlyStopping(monitor='val_accuracy', patience=5, restore_best_weights=True)
    
    history = model.fit(
        train_generator,
        epochs=30,
        validation_data=validation_generator,
        callbacks=[checkpoint_callback_model, early_stopping]
    )
    
  • 加入学习率调度:
    用ReduceLROnPlateau回调,当验证集损失停滞时降低学习率,帮助模型跳出局部最优:
    from tensorflow.keras.callbacks import ReduceLROnPlateau
    
    lr_scheduler = ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=3, min_lr=1e-6)
    
    history = model.fit(
        train_generator,
        epochs=30,
        validation_data=validation_generator,
        callbacks=[checkpoint_callback_model, early_stopping, lr_scheduler]
    )
    
  • 调整批次大小:
    根据显存情况调整batch_size,比如尝试16或64,不同批次大小可能影响模型收敛效果。

四、辅助分析手段

  • 可视化训练曲线:绘制训练/验证的准确率、损失曲线,判断模型状态:
    • 若两者均低:欠拟合,需增加模型复杂度或训练轮数
    • 若训练高、验证低:过拟合,需加强数据增强或正则化
  • 生成混淆矩阵:分析哪些类别容易被混淆,针对这些类别补充样本或优化增强策略,甚至可加入注意力机制强化关键特征学习。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:18:15