我正在训练一个用于 MR 图像脑部提取的模型。我使用 2D U-Net 架构和预训练的 EfficientNetV2B3。def dice_coefficients(y_true, y_pred, smooth=0): Intersection = K.sum(y_tr...
我正在训练一个用于 MRI 图像脑部提取的模型。我使用 2D U-Net 架构和预训练的 EfficientNetV2B3。
def dice_coefficients(y_true, y_pred, smooth=0):
intersection = K.sum(y_true * y_pred)
union = K.sum(y_true) + K.sum(y_pred)
return (2 * intersection + smooth) / (union + smooth)
def dice_coefficients_loss(y_true, y_pred, smooth=0):
return -dice_coefficients(y_true, y_pred, smooth)
def iou(y_true, y_pred, smooth=0):
intersection = K.sum(y_true * y_pred)
sum = K.sum(y_true + y_pred)
iou = (intersection + smooth) / (sum - intersection + smooth)
return iou
### COMPILE THE MODEL
opti = Adam(learning_rate=1e-4)
unet_model5.compile(optimizer=opti,
loss=dice_coefficients_loss,
metrics=["accuracy", iou, dice_coefficients])
# Early Stopping
early_stopping_unet = EarlyStopping(monitor='loss',
patience=10)
# Learning Rate Adjustment
reduce_lr_unet = ReduceLROnPlateau(monitor='val_loss', factor=0.2,
patience=5, min_lr=1e-7)
model_history = unet_model5.fit(train_generator, batch_size = 16, epochs=200,validation_data=val_generator, callbacks = [early_stopping_unet, reduce_lr_unet])
Dice系数损失的演变:
骰子系数的演变:
准确度的演变:
我的骰子和准确度值相当高,但我认为如果我能找出模型的问题(如果有的话)会更好。我尝试更改一些超参数,例如学习率、辍学率、层数。我无法将 batch_size 增加到高于 16,然后它会导致资源耗尽的错误,但我使用的是 3060 Ti,并且我确保 tensorflow 使用我的 gpu。我添加了 batchnorm,否则 val_accuracy 不会增加,出于某种我不明白的原因。如果你能解释一下就太好了。我还将我的预训练模型更改为其他模型,例如 VGG16、InceptionResNetV2,并相应地预处理输入,最后是 EfficientNetV2B3,它给出了最好的结果。(我也在使用早期停止并减少 lr 回调)
为什么准确率会迅速增加,而骰子系数却越来越慢?我怎样才能使准确率超过停留在 0.95 的水平?