Вы можете попробовать использовать keras.layers.merge
.Я использовал это раньше для создания сиамских сетей с чем-то вроде:
first_output = model(first_input)
second_output = model(second_input)
mae = lambda x: mean_absolute_error(x[0], x[1])
distance = merge(inputs=[first_output, second_output],
mode=mae,
output_shape=lambda x: x[0],
name='mean_absolute_error')
Для примера с сиамской сетью вы обычно делали бы некоторый прогноз на эту меру расстояния с помощью чего-то вроде:
prediction = Dense(2, activation='softmax', name='prediction')(distance)
model = Model([first_input, second_input], prediction, name='siamese_net')
model.compile(optimizer=Adam(),
loss=some_loss_function)
с использованием keras.models.Model
и keras.layers.Dense
для этого примера.
Обратите внимание, что keras.layers.merge
(как мне кажется) устарело в последних версиях KerasЭто действительно позор.Я думаю, чтобы сделать нечто подобное с самыми современными Keras, вам нужно будет использовать keras.layers.Concatenate
, чтобы объединить два результата, а затем keras.layers.Lambda
, чтобы применить функцию.