Как ваш код, у вас есть две отдельные модели.В то время как вы просто можете использовать выходные данные вашего общего слоя представления дважды для двух следующих подсетей, вы должны объединить две подсети для ввода:
Xinput = Input(shape=(100,))
Yinput = Input(shape=(300,))
Xencoded = Dense(50, activation='relu')(Xinput)
Xencoded = Dense(20, activation='relu')(Xencoded)
Yencoded = Dense(120, activation='relu')(Yinput)
Yencoded = Dense(50, activation='relu')(Yencoded)
shared_input = Concatenate()([Xencoded, Yencoded])
shared_output = Dense(15, activation='relu')(shared_input)
Xdecoded = Dense(20, activation='relu')(shared_output)
Xdecoded = Dense(50, activation='relu')(Xdecoded)
Xdecoded = Dense(100, activation='relu')(Xdecoded)
Ydecoded = Dense(50, activation='relu')(shared_output)
Ydecoded = Dense(120, activation='relu')(Ydecoded)
Ydecoded = Dense(300, activation='relu')(Ydecoded)
Теперь у вас есть два отдельных выхода.Таким образом, вам нужны две отдельные функции потерь, которые будут добавлены так или иначе для компиляции модели:
model = Model([Xinput, Yinput], [Xdecoded, Ydecoded])
model.compile(optimizer='adam', loss=['mse', 'mse'], loss_weights=[1., 1.])
Затем вы можете просто обучить модель следующим образом:
model.fit([X_input, Y_input], [X_label, Y_label])