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

基于UNet的中风病灶二分类任务:模型无有效收敛求助

问题描述

我正在基于UNet开展中风病灶二分类任务,按病灶面积大小划分:大面积为1,小面积为0。标签为自行标注,准确性有待提升。训练20个epoch后,模型准确率始终在0.5左右波动,损失维持在0.6上下,表现近乎随机猜测。

使用的UNet代码

import keras_unet
def define_unet(n_filters=neuron,
                    n_layers=4,
                    dropout_rate=0.25):
    model_unet = keras_unet.models.custom_unet(input_shape=(img_size, img_size, 3),
                                              activation='relu',
                                              use_batch_norm=True,
                                              upsample_mode='deconv',
                                              dropout=dropout_rate,
                                              dropout_type='spatial',
                                              filters=n_filters,
                                              num_layers=n_layers,
                                              output_activation='linear'
                                              )
    
    GAP = keras.layers.GlobalAveragePooling2D()(model_unet.output)        
    outputs = keras.layers.Dense(1,activation = 'sigmoid')(GAP)
    model_unet = keras.Model(inputs = model_unet.input, outputs = outputs)
#bce is just the binary crossentropy
    model_unet.compile(optimizer=adam, loss=bce_loss,metrics=['accuracy'])
    model_unet.summary()

    return model_unet

超参数设置

learning_rate = 0.0001
epochs = 20
dropout_rate = 0.2
batch_size = 16
kernel_size = 3
neuron = 8
adam = keras.optimizers.Adam(learning_rate=learning_rate)

数据集与训练情况

数据集包含1000张图像,按8:2划分为训练集与验证集,使用batch_size=16训练。
准确率曲线:acc_plot
损失曲线:loss_plot

已尝试调整多种学习率,但问题仍未解决,恳请提供优化建议,感谢!


优化建议

1. 优先排查数据与标签问题

  • 标签准确性校验:随机抽取30-50张图像重新核对标注,自行标注的标签若存在大量错误,模型无法学习到有效特征,必然只能随机输出。
  • 类别分布统计:统计训练/验证集中两类样本的数量,若存在严重失衡(如9:1),会导致模型训练方向偏差,可采用过采样少类样本、欠采样多类样本,或使用加权交叉熵损失(给少类样本更高权重)。

2. 调整模型结构适配分类任务

  • 修正UNet输出逻辑:UNet原生是为分割任务设计,输出为同尺寸特征图,直接接全局平均池化会丢失病灶局部细节。建议:
    • 方案一:移除GAP,将UNet最后一层特征图通过1x1卷积降维为单通道,再接sigmoid输出;
    • 方案二:改用ResNet、EfficientNet等原生分类模型,这类模型在二分类任务上的效率和效果更适配。
  • 提升模型容量:初始卷积核设为8,模型容量过小,难以捕捉中风病灶的复杂特征,建议将neuron调整为32或64,逐步增加模型表达能力。
  • 优化Dropout设置:当前代码中函数参数与超参数的dropout_rate不一致,需统一;同时spatial dropout在小模型上可能过度抑制特征,可暂时移除dropout,观察模型是否能拟合。

3. 优化训练策略

  • 确认损失函数正确性:确保bce_loss是标准的二元交叉熵(如keras.losses.BinaryCrossentropy()),自定义损失函数出错会直接导致训练失效。
  • 增加训练轮数并加入早停:20个epoch可能不足以让模型学到有效特征,可提升至50-100个epoch,同时添加EarlyStopping回调,当验证损失连续5-10个epoch无下降时停止训练,避免过拟合。
  • 使用动态学习率:除了固定学习率,可尝试ReduceLROnPlateau调度器,当验证损失停滞时自动降低学习率;或采用余弦退火学习率,帮助模型后期精细调整。
  • 加入数据增强:针对中风病灶图像,添加随机翻转、旋转、缩放、亮度调整等增强操作,提升样本多样性,帮助模型泛化。

4. 规范数据预处理

  • 图像归一化:确保输入图像完成正确归一化(如缩放到0-1或-1到1),未归一化的图像会导致模型难以收敛。
  • 增强病灶对比度:若原始图像中病灶占比极小,可采用医学图像常用的窗宽窗位调整,凸显病灶区域,降低模型特征提取难度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:55:21