У меня есть простая полностью подключенная модель, как показано ниже,
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
Но эта модель не дает ожидаемой производительности