Keras-将多个模型合并为一个模型,并使用predict_prob计算方差

时间:2019-07-11 15:43:15

标签: tensorflow keras deep-learning

我正在使用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个模型,并获取平均值和标准差?

1 个答案:

答案 0 :(得分:1)

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

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')

所有这些应该可以满足您的需求!
保持联系。