Как я могу сделать N копий одной модели и тренироваться отдельно? - PullRequest
0 голосов
/ 07 октября 2019

У меня есть простая полностью подключенная модель, как показано ниже,

import keras.backend as K
from keras.layers import Dense, Activation, Lambda,

def ModelX(m): 

    hidden1 = 8
    hidden2 = 8
    hidden3 = 8

    model_input = layers.Input(shape=(2,))
    hidden_layer1 = Dense(hidden1, activation='relu')(model_input)
    hidden_layer2 = Dense(hidden2, activation='relu')(hidden_layer1)
    hidden_layer3 = Dense(hidden3, activation='relu')(hidden_layer2)
    model_output = Dense(m, activation='linear')(hidden_layer3)
    modelx = Model(inputs=model_input, outputs=model_output)

    return modelX

У меня есть последовательность входных данных длиной (2, N). Я хочу иметь массив N длины ModelX, чтобы каждый срез (2,1) входной последовательности был входом для каждой модели. Наконец, выходные данные этих моделей должны быть объединены вместе для получения последовательности длиной 4N.

PS: keras.layers.TimeDistributed() не то, что я ожидаю. Я хочу вводить каждый фрагмент ввода в разные копии одной и той же модели и обучать их отдельно. Как мне этого добиться?

Это то, что я сделал до сих пор,

def Model_Array(Config): 
    N = Config.N
    y = layers.Input(shape=(2,N,))


    for i in range(N):
        x_input = Lambda(lambda x: x[:, :, i])(y)

        if i == 0:
           x_output = Modelx(Config.m)(x_input)
        else:
            x_output = layers.concatenate([x_output,
                                           Modelx(Config.m)(x_input)])

    x_output = Lambda(lambda x: x[:, :tf.cast(N, tf.int32)])(x_output)

    output = SomeOtherModel(Config)(x_output)
    output = Lambda(lambda x: K.sigmoid(-x))(output)

    model = Model(y, output)
    return model

Но эта модель не дает ожидаемой производительности

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