为在Keras中保存哪些模型设置严格的Val acc限制?

时间:2019-01-18 07:28:59

标签: python-3.x keras deep-learning

我当前将save_best_onlyModelCheckPoint一起使用:

ModelCheckpoint(create_save_path(), monitor='val_acc', verbose=2,
                            save_best_only=True, save_weights_only=False,
                            mode='auto', period=1)

但是,如果我加载不同的模型或什至是相同的模型,则该模型无权访问先前的训练val_acc并从头开始save_best_only进程。

由于我将训练不同的模型,所以我只想对值进行硬编码,以便仅在超过该值时才保存。

是否可以使用ModelCheckPoint做到这一点?

https://keras.io/callbacks/

1 个答案:

答案 0 :(得分:0)

IIUC,您已经训练了一个模型,其精确度等于特定值,例如:30%。重新加载和训练该模型时,它将保存精度低于30%的模型,并且您不希望发生这种情况。

我检查了keras的源代码,发现ModelCheckpoint有一个名为best的属性,可以作为基准。

keras - ModelCheckpoint

if mode == 'min':
    self.monitor_op = np.less
    self.best = np.Inf
elif mode == 'max':
    self.monitor_op = np.greater
    self.best = -np.Inf
else:
    if 'acc' in self.monitor or self.monitor.startswith('fmeasure'):
        self.monitor_op = np.greater
        self.best = -np.Inf
    else:
        self.monitor_op = np.less
        self.best = np.Inf

但是其初始化程序不接受此参数:

def __init__(self, filepath, monitor='val_loss', verbose=0,
             save_best_only=False, save_weights_only=False,
             mode='auto', period=1):

因此,您可以在创建ModelCheckpoint对象之后手动进行设置,如下所示:

mcp = ModelCheckpoint(create_save_path(), monitor='val_acc', verbose=2,
                            save_best_only=True, save_weights_only=False,
                            mode='auto', period=1)
mcp.best = 0.3