Keras回调ModelCheckpoint不节省权重

时间:2019-11-03 16:17:18

标签: python keras deep-learning conv-neural-network

此处建议的解决方案无法解决我的问题this question

我正在尝试使用回调ModelCheckpoint和EarlyStopping来在尽早停止时保存最佳权重。在第一个时期之后,我收到运行时警告,但是代码将运行其余的时期,而不会出错,但是仍然没有出现包含权重的文件。第一个时期之后的警告如下:

  

RuntimeWarning:仅当val_acc可用时,才能保存最佳模型,   跳过。 “跳过。” %(self.monitor),RuntimeWarning)   RuntimeWarning:以指标val_acc为条件的提前停止   不可用。可用的指标有:   val_loss,val_accuracy,损失,准确性(self.monitor,   ','。join(list(logs.keys()))),RuntimeWarning

我已将验证数据添加到fit()函数中,所以我不确定为什么。

filepath = "weights_best.hdf5"

model.compile(loss="mean_squared_error",
                  metrics=['accuracy'],
                  optimizer=optimizer)
batchSize = 64 
numEpochs = 75
validation_data = (data.x_valid, data.y_valid)

callbackCheckpoint = keras.callbacks.callbacks.ModelCheckpoint(filepath,
                                                                   monitor='val_acc',
                                                                   save_best_only=True,
                                                                   save_weights_only= True,
                                                                   mode='max')

callbackEarlyStop = keras.callbacks.callbacks.EarlyStopping(monitor='val_acc',
                                                                min_delta=0,
                                                                patience=7,
                                                                verbose=0,
                                                                mode='auto')
callbacks = [callbackCheckpoint, callbackEarlyStop]
model.fit(data.x_train, data.y_train, batchSize, numEpochs, callbacks=callbacks,
              validation_data=validation_data)

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

monitor='val_acc'更改为monitor='val_accuracy'或将metrics=['accuracy']更改为metrics=['acc']

答案 1 :(得分:0)

是的,监视'val_accuracy',仅是注释,基于最高的val_accuracy监视和保存权重可能不会给您“最佳”的答案。监视“ val_loss”通常是一个更好的答案。 val_loss和val_accuracy以完全不同的方式计算。看到val_loss增加,但也有val_accuracy增加,反之亦然。最后,您要使用验证损失最小的模型。如果这样做,请确保在检查点回调中更改mode ='min'或mode ='auto。