Я пытаюсь реализовать гибридную модель LSTM-DNN с несколькими входами, в которой выходные данные обоих слоев объединяются. К сожалению, сразу после начала обучения это происходит:
ValueError: Error when checking input: expected input_1 to have 2 dimensions, but got array with shape (32, 168, 5)
Я исследовал другие методы, но больше всего касается случая, когда полученный массив имеет меньшую размерность, чем ожидалось. Я читал, что flatten может быть полезен, но я не уверен, как его реализовать.
Это моя модель:
# first input model
input_1 = Input(shape=(5, ))
input_1_expand = tf.expand_dims(input_1, axis=-1)
dense_1 = Dense(units=64, input_shape=(None, 5,))(input_1_expand)
# second input model
input_2 = Input(shape=(7, ))
input_2_expand = tf.expand_dims(input_2, axis=-1)
lstm_1 = LSTM(units=64, return_sequences=True, input_shape=(None, 7,))(input_2_expand)
# merge input models
merge = concatenate([dense_1, lstm_1], axis=1)
output = Dense(num_y_signals, activation='sigmoid')(merge)
model = Model(inputs=[input_1, input_2], outputs=output)
# summarize layers
print(model.summary())
Обучение модели:
%time
model.fit_generator(generator=generator,
epochs=10,
steps_per_epoch=30,
validation_data=validation_data,
callbacks=callbacks)
Где генератор - это функция batch_generator, которая выдает
[x_batch_1, x_batch_2], y_batch
x_batch_1 shape: (32, 168, 5)
x_batch_2 shape: (32, 168, 7)
y_batch shape: (32, 168, 1)
Где 32 - размер пакета, а 168 - длина последовательности
Я также не уверен, как я реализовал tfРасширить и объединить оси. Я только что попробовал комбинацию, которая заставила бы модель скомпилироваться
РЕДАКТИРОВАТЬ: я забыл включить validation_data:
validation_data = ([np.expand_dims(x_test1_scaled, axis=0),
np.expand_dims(x_test2_scaled, axis=0)],
np.expand_dims(y_test_scaled, axis=0))
Где
expanded x_test1_scaled Shape: (1, 5808, 5)
expanded x_test2_scaled Shape: (1, 5808, 7)
expanded y_test_scaled Shape: (1, 5808, 1)