Объедините разные модели Keras в одну - PullRequest
1 голос
/ 25 апреля 2019

Я пытаюсь прогнозировать временные ряды, используя LSTM.Чтобы уменьшить дисперсию, я попытался предсказать, используя 3 модели и взяв среднее значение 3, что дало мне лучшие результаты.После обучения и проверки я хочу сохранить свою модель для будущих прогнозов.Однако, поскольку у меня есть 3 разные модели, я хотел бы знать, возможно ли объединить их в ОДНУ модель и затем сохранить / загрузить ее, или мне следует сохранить все модели по одной и загрузить их позже для будущих прогнозов?

# fit 3 models
   model1 = fit_lstm(train_scaled, batch_size,nb_epochs, nb_neurons)
   model2 = fit_lstm(train_scaled, batch_size,nb_epochs, nb_neurons)
   model3 = fit_lstm(train_scaled, batch_size,nb_epochs, nb_neurons)

# predict on test set using 3 models
   forecast1 = model1.predict(test_reshaped, batch_size=batch_size)
   forecast2 = model2.predict(test_reshaped, batch_size=batch_size)
   forecast3 = model3.predict(test_reshaped, batch_size=batch_size)

1 Ответ

1 голос
/ 25 апреля 2019

Вы ищете модель ансамбля.

Что-то вроде следующего:

from keras.models import load_model
models=[]
for i in range(numOfModels):

    modelTemp=load_model(path2modelx) # load model
    modelTemp.name="aUniqueModelName" # change name to be unique
    models.append(modelTemp)


def ensembleModels(models, model_input):
    # collect outputs of models in a list
    yModels=[model(model_input) for model in models] 
    # averaging outputs
    yAvg=layers.average(yModels) 
    # build model from same input and avg output
    modelEns = Model(inputs=model_input, outputs=yAvg,    name='ensemble')  

    return modelEns



model_input = Input(shape=models[0].input_shape[1:]) # c*h*w
modelEns = ensembleModels(models, model_input)
model.summary()

Сохраните модель ансамбля:

modelEns.save(<path_to_model>)

Загрузка и прогноз:

modelEns=load_model(<path_to_model>)
modelEns.summary()
y=modelEns.predict(x)

Источник

Проверьте также эту статью .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...