繁体   English   中英

在特定时期保存 Keras 模型

[英]Save Keras model at specific epochs

我正在使用 Keras 对我的数据集进行一些训练,每次保持运行以定位获得最佳结果所需的 epoch 数是非常耗时的。 我尝试使用回调来获得最佳模型,但它不起作用并且通常过早停止。 此外,保存每 N 个时期对我来说不是一个选择。

我想做的是在完成某些特定时期后保存模型。 比如说,在epoch = 150结束后,它会被保存为model.save(model_1.h5)并且在epoch = 152 ,它会被保存为model.save(model_2.h5)等等......特定的时代。

有没有办法在 Keras 中实现这一点? 我已经搜索了一种方法,但到目前为止还没有运气。

感谢您的任何帮助/建议。

编辑
在大多数情况下,使用@Toan Tran 在他的回答中建议的名称格式就足够了。

但是如果你需要一些复杂的逻辑,你可以使用回调,例如

import keras

class CustomSaver(keras.callbacks.Callback):
    def on_epoch_end(self, epoch, logs={}):
        if epoch == 2:  # or save after some epoch, each k-th epoch etc.
            self.model.save("model_{}.hd5".format(epoch))

on_epoch_end在每个 epoch 结束时调用; epoch是多个纪元,后一个参数是一个日志(您可以在文档中阅读其他回调方法)。 将逻辑放入此方法中(在示例中它尽可能简单)。

创建 saver 对象并将其放入fit方法:

import keras
import numpy as np

inp = keras.layers.Input(shape=(10,))
dense = keras.layers.Dense(10, activation='relu')(inp)
out = keras.layers.Dense(1, activation='sigmoid')(dense)
model = keras.models.Model(inp, out)
model.compile(optimizer="adam", loss="binary_crossentropy",)

# Just a noise data for fast working example
X = np.random.normal(0, 1, (1000, 10))
y = np.random.randint(0, 2, 1000)

# create and use callback:
saver = CustomSaver()
model.fit(X, y, callbacks=[saver], epochs=5)

bash

!ls
Out:
model_2.hd5                     

所以,它有效。

checkpoint = keras.callbacks.ModelCheckpoint('model{epoch:08d}.h5', period=5) 
model.fit(X_train, Y_train, callbacks=[checkpoint])

你试过检查点吗? period=5表示模型在 5 个 epoch 后保存

更多细节在这里

希望这有帮助:)

好吧,我还不能对帖子发表评论。 所以,我要补充@Toan Tran的回答。 使用最新版本的 Keras,不推荐使用参数period 相反,我们可以使用save_freq

在以下示例中,模型在每个 epoch 之后保存。

checkpoint = keras.callbacks.ModelCheckpoint(model_save_path+'/checkpoint_{epoch:02d}', save_freq='epoch')
H=model.fit(x=x_train, y=y_train,epochs=epoch_no,verbose=2, callbacks=[checkpoint])

您可以从keras 文档中找到更多详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM