有没有办法在tf.keras中的指定时期保存模型?
Is there a way to save a model at a specified epoch in tf.keras?
使用tf.keras.callbacks,我只能通过选择一个属性来监控(通常是验证准确性)来自动保存最佳模型,但有时,我需要根据验证和比较来保存它训练准确率。我该怎么做?
tf.keras.history 文件是否记录模型在每个 epoch 的权重?如果是这样,我如何通过指定我想要的纪元从历史文件中保存我的模型?这是另一种可能的解决方案。
这就是我 运行 遇到的情况:有时,我的验证准确率在早期阶段非常高(我想这纯属偶然),而我的训练准确率仍远低于它。这个时期最终成为自动保存的模型。这是一个蹩脚的模型,因为它的训练准确率很低,但它是因为它的高验证准确率而被保存下来的模型。如果它保存在训练和验证准确性相交的地方,那将是一个非常好的模型。所以在每个时期,我更愿意比较训练准确率和验证准确率,选择两者中最低的,并据此决定我的最佳模型。关于如何做到这一点有什么建议吗?
检查回调 ModelCheckpoint
您可以保存每个时期的模型并在文件名中包含 accuracy/val 准确度(或之后检查历史对象)。
您可以像这样实现自定义回调:
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]...)
使用tf.keras.callbacks,我只能通过选择一个属性来监控(通常是验证准确性)来自动保存最佳模型,但有时,我需要根据验证和比较来保存它训练准确率。我该怎么做?
tf.keras.history 文件是否记录模型在每个 epoch 的权重?如果是这样,我如何通过指定我想要的纪元从历史文件中保存我的模型?这是另一种可能的解决方案。
这就是我 运行 遇到的情况:有时,我的验证准确率在早期阶段非常高(我想这纯属偶然),而我的训练准确率仍远低于它。这个时期最终成为自动保存的模型。这是一个蹩脚的模型,因为它的训练准确率很低,但它是因为它的高验证准确率而被保存下来的模型。如果它保存在训练和验证准确性相交的地方,那将是一个非常好的模型。所以在每个时期,我更愿意比较训练准确率和验证准确率,选择两者中最低的,并据此决定我的最佳模型。关于如何做到这一点有什么建议吗?
您可以保存每个时期的模型并在文件名中包含 accuracy/val 准确度(或之后检查历史对象)。
您可以像这样实现自定义回调:
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]...)