Python 在特定时期保存Keras模型
我正在使用Keras对我的数据集进行一些训练,每次都要保持运行以找到获得最佳结果所需的历元数是非常耗时的。我尝试使用回调来获得最佳模型,但它不起作用,而且通常停止得太早。而且,每N个时代保存一次对我来说也不是一个选择 我试图做的是在一些特定的时代结束后保存模型。例如,在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中实现这一点?我
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_endepoch
是一些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时代。我的磁盘可能在它到达新纪元之前就用完了。我很感兴趣,谢谢你,先生!!这个解决方案似乎运作良好。