首页 > 解决方案 > Keras - 将多个模型组合成一个模型并使用 predict_prob 计算方差

问题描述

我正在使用 Keras 并为二进制分类构建了 5 个不同的模型。在每个模型上,我都使用predict_proba来获得分类的概率。

5个模型是逻辑回归:

def build_logistic_model(input_dim, output_dim):
    model = Sequential()
    model.add(Embedding(input_dim, embed, input_length=max_length))
    model.add(Flatten())
    model.add(Dense(output_dim, input_dim=embed, activation='softmax'))

所以,现在我有一个包含 5 个模型的列表。我想将这些模型的输出合并到一个新的 Keras 模型中,并得到这 5 个模型的概率的 AVG 和 STD。

有没有办法做到这一点,最后,我会得到 1 个模型,将这 5 个模型合并到他身上?我将向这 5 个模型发送输入并获得 avg 和 std?

标签: tensorflowkerasdeep-learning

解决方案


您可以像这样创建一个新模型:

from keras import backend as K


def std_layer(input):
    return K.std(input)


model_input = Input(shape=input_dim)

def get_avg_std_model(models, model_input):


    outputs = [model.outputs[0] for model in models]
    avg = Average()(outputs)
    a = Concatenate()(outputs)
    std = Lambda(std_layer)(a)
    model = Model(model_input, [avg, std], name='get_avg_std')

    return model

models = [model1 , model2, model3, model4, model5]


get_avg_std = get_avg_std_model(models, model_input)

您将需要像这样定义所有模型:

model_input = Input(shape=input_dim)

def model_example(model_input):

    x = Dense(1)(model_input)

    model1 = Model(inputs=model_input, outputs=x)

    return model 

model1 = model_example(model_input)
model1.compile(optimizer='adadelta', loss='mse')

所有这一切都应该给你你所需要的!
保持联系。


推荐阅读