Это неправильный способ использования функционального API модели Keras. Также невозможно потерять LSTM1 как Loss1 + Loss2. Это будет только Loss1. Аналогично для LSTM2 это будет только Loss2. Однако для объединенной сети вы можете использовать любую линейную комбинацию Loss1 и Loss2 в качестве общей потери, т.е.
Loss_overall = a.Loss1 + b.Loss2. где a, b - неотрицательные действительные числа
Настоящая сущность Model Functional API заключается в том, что он позволяет создавать архитектуру глубокого обучения с несколькими выходами и несколькими входами в одной модели.
def build_lstm_combined():
x = Input(shape=(self.timesteps, self.input_dim,), name = 'input')
h_1 = LSTM(1024, return_sequences=True))(x)
scores = TimeDistributed(Dense(self.input_dim, activation='sigmoid', name='dense'))(h_1)
h_2 = LSTM(1024, return_sequences=True))(h_1)
labels = TimeDistributed(Dense(self.input_dim, activation='sigmoid', name='dense'))(h_2)
LSTM_combined = Model(x,[scores,labels])
return LSTM_combined
У этой комбинированной модели есть потери, которые являются комбинацией Loss1 и Loss2. При составлении модели вы можете указать вес каждой потери, чтобы получить общую потерю. Если ваш желаемый урон равен 0.5Loss1 + Loss2, вы можете сделать это:
model_1 = build_lstm_combined()
model_1.compile(optimizer=Adam(0.001), loss = ['categorical_crossentropy','categorical_crossentropy'],loss_weights= [0.5,1])