使用tf.keras.callbacks,我只能通过选择一个要监视的属性来自动保存最佳模型(通常是验证准确性),但有时我需要根据验证和训练准确性的比较来保存它。我该怎么办?
tf.keras.history文件是否在每个时期记录模型的权重?如果是这样,如何通过指定所需的时期从历史文件中保存模型?那是另一种可能的解决方案。
这是我遇到的情况:有时候,我的验证准确性在早期就很高(我想当然是偶然的),而我的训练准确性仍然远远低于它。该时期最终成为自动保存的模型。这是一个糟糕的模型,因为它的训练准确度很差,但是由于验证准确性很高,所以得到了保存。如果将其保存在训练和验证准确性相符的地方,那将是一个很好的模型。因此,在每个时期,我都希望比较训练的准确性和验证的准确性,选择两者中的最低者,并据此确定最佳模型。有关如何执行此操作的任何建议?
答案 0 :(得分:1)
您可以像这样实现自定义回调:
class CustomModelCheckpoint(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs=None):
# logs is a dictionary
print(f"epoch: {epoch}, train_acc: {logs['acc']}, valid_acc: {logs['val_acc']}")
if logs['val_acc'] > logs['acc']: # your custom condition
self.model.save('model.h5', overwrite=True)
cbk = CustomModelCheckpoint()
model.fit(....callbacks=[cbk]...)
答案 1 :(得分:0)
您可以保存每个时期的模型,并在文件名中包括准确性/ val准确性(或随后检查历史对象)。