Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在特定时期保存Keras模型_Python_Tensorflow_Keras - Fatal编程技术网

Python 在特定时期保存Keras模型

Python 在特定时期保存Keras模型,python,tensorflow,keras,Python,Tensorflow,Keras,我正在使用Keras对我的数据集进行一些训练,每次都要保持运行以找到获得最佳结果所需的历元数是非常耗时的。我尝试使用回调来获得最佳模型,但它不起作用,而且通常停止得太早。而且,每N个时代保存一次对我来说也不是一个选择 我试图做的是在一些特定的时代结束后保存模型。例如,在epoch=150结束后,它将保存为model.save(model_1.h5),在epoch=152结束后,它将保存为model.save(model_2.h5)等。。。对于一些特定的时代 有没有办法在Keras中实现这一点?我

我正在使用Keras对我的数据集进行一些训练,每次都要保持运行以找到获得最佳结果所需的历元数是非常耗时的。我尝试使用回调来获得最佳模型,但它不起作用,而且通常停止得太早。而且,每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个历元后保存

更多细节


希望能帮上忙:)

谢谢你的建议,但我不能保存每一个k时代。我的磁盘可能在它到达新纪元之前就用完了。我很感兴趣,谢谢你,先生!!这个解决方案似乎运作良好。