python - 在特定时期保存 Keras 模型

标签 python tensorflow keras

我正在使用 Keras 对我的数据集进行一些训练,每次都继续运行以找到获得最佳结果所需的轮数非常耗时。我尝试使用回调来获得最佳模型,但它不起作用并且通常停止得太早。另外,保存每 N 个 epochs 对我来说不是一个选择。

我想做的是在完成一些特定时期后保存模型。比方说,epoch = 150结束后,保存为model.save(model_1.h5)epoch = 152后>,它将被保存为 model.save(model_2.h5) 等...对于几个特定的​​时期。

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

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

最佳答案

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

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

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 是一个纪元数,后一个参数是一个日志(你可以在文档中阅读其他回调方法)。将逻辑放入此方法中(在示例中它尽可能简单)。

创建保存器对象并将其放入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                     

所以,它有效。

关于python - 在特定时期保存 Keras 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54323960/

相关文章:

python - 将二进制位组合在一起

python - 如何在tensorflow中使用tf.data读取.csv文件?

python - Keras - 查找嵌入

python - 有效地向模型中的所有可训练权重添加噪声

python - 默认 MaxPoolingOp 仅在设备类型 CPU 上支持 NHWC

python - tf.keras.preprocessing.text.Tokenizer() 和 tfds.features.text.Tokenizer() 的比较

python - 了解新python := operator的原因

python - 使用 pySerial 控制发酵 jar

python - Flask:添加使用统计

tensorflow - 在 TensorFlow 中定义自定义模型/架构