如何在keras中修改ModelCheckPoint以监视val_acc和val_loss并相应地保存最佳模型?

man*_*anv 2 keras tensorflow

ModelCheckPoint提供了分别保存val_Acc和的选项val_loss。我想以某种方式修改它,以便在val_acc改进时->保存模型。如果val_acc等于先前的最佳值,val_acc则检查val_loss,如果val_loss小于先前的最佳值,val_loss则保存模型。

    if val_acc(epoch i)> best_val_acc:
        save model
    else if val_acc(epoch i) == best_val_acc:
        if val_loss(epoch i) < best_val_loss:
           save model
        else
           do not save model
Run Code Online (Sandbox Code Playgroud)

Dan*_*ler 6

您可以添加两个回调:

callbacks = [ModelCheckpoint(filepathAcc, monitor='val_acc', ...),
             ModelCheckpoint(filepathLoss, monitor='val_loss', ...)]

model.fit(......., callbacks=callbacks)
Run Code Online (Sandbox Code Playgroud)

使用自定义回调

您可以在.NET中做任何您想做的事情LambdaCallback(on_epoch_end=saveModel)

best_val_acc = 0
best_val_loss = sys.float_info.max 

def saveModel(epoch,logs):
    val_acc = logs['val_acc']
    val_loss = logs['val_loss']

    if val_acc > best_val_acc:
        best_val_acc = val_acc
        model.save(...)
    elif val_acc == best_val_acc:
        if val_loss < best_val_loss:
            best_val_loss=val_loss
            model.save(...)

callbacks = [LambdaCallback(on_epoch_end=saveModel)]
Run Code Online (Sandbox Code Playgroud)

但是,这是没有从一个单一的不同ModelCheckpoint使用val_acc。除非您使用的样本很少,或者自定义精度相差不大,否则您将不会真正获得相同的精度。