【问题标题】:Merge different Keras models into ONE将不同的 Keras 模型合并为 ONE
【发布时间】:2019-04-25 12:08:39
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

    标签: python merge keras model lstm


    【解决方案1】:

    你在追求一个集成模型。

    类似于以下内容:

    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)
    

    Source

    也检查this article

    【讨论】:

    • 你知道这条线是干什么用的吗? model_input = Input(shape=models[0].input_shape[1:]) # chw
    • 模型输入应该是一个与输入数据具有相同形状的张量。例如,如果图像输入采用通道优先格式:(1,96,128),它将得到 (96, 128)
    • 所以 models[0].input_shape[1:] 是我给第一个模型的数据形状不是吗?
    • 是的,换句话说models[0].input_shape(rows, columns)
    • 是的,但它给了我这个错误:您必须为占位符张量“lstm_3_input”提供一个值,其 dtype 为 float 和 shape [1,1,1]
    猜你喜欢
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    相关资源
    最近更新 更多