Я пытаюсь построить модель с несколькими входами и несколькими выходами, используя keras function api , и я слежу за их кодом, но я получил эту ошибку:
ValueError: AДля слоя Concatenate
требуются входные данные с соответствующими формами, за исключением оси concat.Получил входные формы: [(Нет, 50), (Нет, 50, 1)]
Я пропустил слой Embedded, вот код:
def build_model(self):
main_input = Input(shape=(self.seq_len, 1), name='main_input')
print(main_input.shape)
# seq_len = 50
# A LSTM will transform the vector sequence into a single vector,
# containing information about the entire sequence
lstm_out = LSTM(self.seq_len,input_shape=(self.seq_len,1) )(main_input)
self.auxiliary_output = Dense(1, activation='sigmoid', name='aux_output')(lstm_out)
auxiliary_input = Input(shape=(self.seq_len,1), name='aux_input')
print(auxiliary_input.shape)
x = concatenate([lstm_out, auxiliary_input])
# We stack a deep densely-connected network on top
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
# And finally we add the main logistic regression layer
main_output = Dense(1, activation='sigmoid', name='main_output')(x)
self.model = Model(inputs=[main_input, auxiliary_input], outputs=[main_output, auxiliary_output])
print(self.model.summary())
self.model.compile(optimizer='rmsprop', loss='binary_crossentropy',
loss_weights=[1., 0.2])
Iполучил эту ошибку на этапе объединения, хотя печать формы обоих слоев (?, 50,1).Я не знаю точно, почему я получил это, и какова точная ошибка в input_shape первого слоя и почему он не дает мне такую же форму, как это должно быть при использовании print(main_input.shape)
, и как ее решить?
ОБНОВЛЕНИЕ:
Я нашел решение для ошибки, изменив форму второго входного слоя
auxiliary_input = Input(shape=(self.seq_len,), name='aux_input')
, так что теперь они могут плавно соединяться,но до сих пор не понятно, почему?