Python 使用fit_generator()以最小的验证损失保存模型
如何使用keras函数fit_generator()来训练并同时保存模型权重,使验证损失最小?您可以使用以下代码保存模型权重Python 使用fit_generator()以最小的验证损失保存模型,python,validation,keras,Python,Validation,Keras,如何使用keras函数fit_generator()来训练并同时保存模型权重,使验证损失最小?您可以使用以下代码保存模型权重 model.save_weights('weights.h5') 您可以使用以下代码保存模型的体系结构: model.save('architecure.h5') 如果空间不是问题,那么您可以存储所有模型并选择验证损失最小的模型 class TestCallback(Callback): def __init__(self, test_data): self.
model.save_weights('weights.h5')
您可以使用以下代码保存模型的体系结构:
model.save('architecure.h5')
如果空间不是问题,那么您可以存储所有模型并选择验证损失最小的模型
class TestCallback(Callback):
def __init__(self, test_data):
self.test_data = test_data
def on_epoch_end(self, epoch, logs={}):
x, y = self.test_data
loss, acc = self.model.evaluate(x, y, verbose=0)
print('\nTesting loss: {}, acc: {}\n'.format(loss, acc))
model.fit(X_train, Y_train, validation_data=(X_val, Y_val),
callbacks=[TestCallback((X_test, Y_test))])
或者,您可以在每个历元之后使用回调来评估验证损失,并采用当前验证数据损失最低的模型。这可以通过参考以下链接来完成。在本例中,只需更改传递给TestCallback的数据,并使用一个变量来存储当前的最小验证损失
class TestCallback(Callback):
def __init__(self, test_data):
self.test_data = test_data
def on_epoch_end(self, epoch, logs={}):
x, y = self.test_data
loss, acc = self.model.evaluate(x, y, verbose=0)
print('\nTesting loss: {}, acc: {}\n'.format(loss, acc))
model.fit(X_train, Y_train, validation_data=(X_val, Y_val),
callbacks=[TestCallback((X_test, Y_test))])
您可以在定义检查点时设置save\u best\u only=True:
from keras.callbacks import EarlyStopping, ModelCheckpoint
early_stop = EarlyStopping(monitor='loss', min_delta=0.001, patience=3, mode='min', verbose=1)
checkpoint = ModelCheckpoint('model_best_weights.h5', monitor='loss', verbose=1, save_best_only=True, mode='min', period=1
现在,在拟合模型时,只需包含参数callbacks=[early\u stop,checkpoint]
。它将以最低的验证损失保存权重
model.fit_generator(X_train, Y_train, validation_data=(X_val, Y_val),
callbacks = [early_stop,checkpoint])
保存模型体系结构
如果还想保存模型体系结构,则需要将模型序列化为JSON:
model_json = model.to_json()
with open("model.json", "w") as json_file:
json_file.write(model_json)
最后用架构和权重加载模型:
# load json and create model
json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
# load weights into new model
loaded_model.load_weights("model_best_weights.h5")
print("Loaded model from disk")
# evaluate loaded model on test data
loaded_model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
score = loaded_model.evaluate(X, Y, verbose=0)
请参阅:谢谢。我相信这个回调只保存了模型权重,而没有保存模型架构。因此,如果我必须对我的模型进行推理,我如何加载模型和权重?这太棒了。谢谢我会看一看,这是考虑训练损失而不是验证损失。如何让它考虑验证丢失?@ @ RouthSealMeals=“ValueLead”,而不只是ELSPLOP回调中的“监视器”=“丢失”