我正在使用Keras对我的数据集进行一些训练,并且每次都要持续运行以找到获得最佳结果所需的时期数是很费时间的。我尝试使用回调来获得最佳模型,但它无法正常工作,通常停止得太早。另外,保存每N个时期对我来说不是一个选择。
我想要做的是在完成某些特定的时期后保存模型。举例来说,假设List<DoctorViewModel> doctors = new List<DoctorViewModel>();
public class DoctorViewModel
{
public string Email { get; set; }
public string Name { get; set; }
public int isApproved { get; set; }
}
结束后,它会另存为epoch = 150
,而model.save(model_1.h5)
之后,它会另存为epoch = 152
等...
有没有办法在Keras中实现这一点?我已经在寻找一种方法,但到目前为止还没有运气。
谢谢您的帮助/建议。
答案 0 :(得分:2)
例如,您可以使用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
所以,它可行。
答案 1 :(得分:0)
checkpoint = keras.callbacks.ModelCheckpoint('model{epoch:08d}.h5', period=5)
model.fit(X_train, Y_train, callbacks=[checkpoint])
您尝试过检查站吗? period=5
表示在5个时间段后保存了模型
更多详细信息here
希望获得帮助:)