fit_generator()以最少的验证损失来保存模型

时间:2017-12-14 13:43:12

标签: python validation keras

如何使用keras函数fit_generator()来训练并同时以最低的验证损失保存模型权重?

2 个答案:

答案 0 :(得分:3)

您可以使用以下代码保存模型权重。

model.save_weights('weights.h5')

您可以使用以下代码保存模型的体系结构:

model.save('architecure.h5')

如果空间不是问题,那么您可以存储所有模型并选择具有最低验证损失的模型。

或者您可以在每个纪元后使用回调来评估验证损失,并采用当前验证数据损失最小的模型。这可以通过参考以下链接来完成。在此示例中,只需更改传递给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))])

Using callbacks example

答案 1 :(得分:1)

您可以在定义检查点时设置 save_best_only = True

int batchSize = 500;
List<Item> items = new ArrayList(batchSize);
for (Item item : asd) {
    items.add(item);
    if (items.size() >= batchSize) {
        //persist
    }
}

现在,在拟合模型时,只需包含参数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_stop,checkpoint]

保存模型架构

如果您也想保存模型架构,则需要将模型序列化为JSON:

model.fit_generator(X_train, Y_train, validation_data=(X_val, Y_val), 
      callbacks = [early_stop,checkpoint])

最后用架构和权重加载模型:

model_json = model.to_json()
with open("model.json", "w") as json_file:
    json_file.write(model_json)

请参考:https://machinelearningmastery.com/save-load-keras-deep-learning-models/