Как улучшить val_loss и val_acc - PullRequest
0 голосов
/ 30 апреля 2020

Я тренирую сверточную нейронную сеть (использую для segmentation). И у меня есть проблема с результатами проверки (val_loss, val_acc - в сети для сегментации используется термин val_dice_coef), потому что есть только минимальное изменение и результат не улучшается по сравнению с acc - dice_coef и loss.

Я использую этот пример кода с собственным оптимизатором - мои параметры:

total_number_of_data = 3547 #val + training data
epochs = 400
image_size = 128
batch_size = 2
val_data_size = 400

opt = optimizers.RMSprop(learning_rate=0.0000001, decay=1e-6)

Результаты после 350 эпох:

epoch |     dice_coef      |        loss         |      val_loss      |   val_dice_coef
------------------------------------------------------------------------------------------
1     | 0.5633156299591064 | 0.43668392300605774 | 0.4752978980541229 | 0.5247021317481995
350   | 0.9698152542114258 | 0.03018493764102459 | 0.3346560299396515 | 0.6653439402580261

Что мне делать?

1 Ответ

1 голос
/ 30 апреля 2020

Это не какое-то особое решение, вы должны попробовать все возможные варианты здесь. Но я расскажу вам более общий процесс, которому следует максимальный гроссмейстер.

def build_lrfn(lr_start=0.00001, lr_max=0.0008, 
               lr_min=0.00001, lr_rampup_epochs=20, 
               lr_sustain_epochs=0, lr_exp_decay=.8):
    lr_max = lr_max * strategy.num_replicas_in_sync

    def lrfn(epoch):
        if epoch < lr_rampup_epochs:
            lr = (lr_max - lr_start) / lr_rampup_epochs * epoch + lr_start
        elif epoch < lr_rampup_epochs + lr_sustain_epochs:
            lr = lr_max
        else:
            lr = (lr_max - lr_min) * lr_exp_decay**(epoch - lr_rampup_epochs - lr_sustain_epochs) + lr_min
        return lr

    return lrfn
lrfn = build_lrfn()
lr_schedule = tf.keras.callbacks.LearningRateScheduler(lrfn, verbose=1)


history = model.fit(
    train_dataset, 
    epochs=EPOCHS, 
    callbacks=[lr_schedule],
    steps_per_epoch=STEPS_PER_EPOCH,
    validation_data=valid_dataset
)

для большего количества оптимизатора я всегда следую этому ссылка

На мой взгляд, Адам в последнее время лучше всего подходит для вашей модели

...