Keras - объединить несколько моделей в одну модель и использовать предикат_prob для расчета дисперсии - PullRequest
0 голосов
/ 11 июля 2019

Я использую 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 и вывести AVG и STD вероятности этих 5 моделей.

есть ли способ сделать это так, в конце концов,Я получу 1 модель, которая объединит в себе эти 5 моделей?Я отправлю входные данные этим 5 моделям и получу значения avg и std?

1 Ответ

1 голос
/ 11 июля 2019

Вы можете создать новую модель, подобную этой:

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

Все, что должно дать вам то, что вам нужно!
Держи меня в курсе.

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