Keras функциональный API множественного ввода LSTM - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь построить модель LSTM с двумя входами, используя функциональный API Keras.

Вот код, который я использовал:

inp_1 = 100
inp_2 = 100
out_1 = 10
N_FEATURES = 1


Input_1 = Input(shape=(inp_1, N_FEATURES), name='Input_1')
LSTM_1 = LSTM(name='LSTM_1', units=128)(Input_1)
Dense_1 = Dense(name='Dense_1', units=128)(LSTM_1)
Input_2 = Input(shape=(inp_2,), name='Input_2')
Dense_2 = Dense(name='Dense_2', units=128)(Input_2)
merge_2 = concatenate([Dense_1, Dense_2])

RepeatVector_1 = RepeatVector(out_1, name='RepeatVector_1')(merge_2)
LSTM_2 = LSTM(name='LSTM_2', units=128)(RepeatVector_1)
output = TimeDistributed(Dense(1,activation='linear'))(LSTM_2)

model = Model(inputs=[Input_1, Input_2], output=    output)

model.compile()

Однако я получил следующую ошибку, которую я не понимаю:

assert len ​​(input_shape)> = 3 AssertionError

для строки:

output = TimeDistributed(Dense(1,activation='linear'))(LSTM_2)

Слой уже принимает тензор длины 128. Чего мне здесь не хватает?

1 Ответ

1 голос
/ 22 марта 2019

Как сказано в документе

Ввод должен быть как минимум 3D , а размер индекса один будет считаться временным измерением.

TimeDistributed Слой применяет слой к каждому временному фрагменту входа. Таким образом, вы должны установить return_sequences=True, чтобы возвращать полный вывод временных рядов в верхнем слое LSTM_2.

LSTM_2 = LSTM(name='LSTM_2', units=128,return_sequences=True)(RepeatVector_1)
# LSTM_2 output shape =(?, 10, 128)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...