Keras TimeDistributed слой с несколькими входами - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь заставить работать следующие строки кода:

low_encoder_out = TimeDistributed( AutoregressiveDecoder(...) )([X_tf, embeddings])

Где AutoregressiveDecoder - это пользовательский слой, который принимает два входа.После небольшого поиска в Google, похоже, проблема заключается в том, что оболочка TimeDistributed не принимает несколько входных данных.Существуют решения, в которых предлагается объединить два входа перед подачей его на слой, но, поскольку их форма

X_tf.shape: (?, 16, 16, 128, 5)
embeddings.shape: (?, 16, 1024)

, я действительно не знаю, как их объединить.Есть ли способ иметь слой TimeDistributed для работы с более чем одним входом?Или, альтернативно, есть какой-нибудь способ объединить два входа хорошим способом?

1 Ответ

0 голосов
/ 24 октября 2018

Как вы упомянули TimeDistributed слой не поддерживает несколько входов.Один (не очень хороший) обходной путь, учитывая тот факт, что число временных шагов (то есть вторая ось) должна быть одинаковой для всех входных данных, состоит в том, чтобы изменить их все на (None, n_timsteps, n_featsN), объединить их и затем передать их каквход TimeDistributed layer:

X_tf_r = Reshape((n_timesteps, -1))(X_tf)
embeddings_r = Reshape((n_timesteps, -1))(embeddings)

concat = concatenate([X_tf_r, embeddings_r])
low_encoder_out = TimeDistributed(AutoregressiveDecoder(...))(concat)

Конечно, вам может потребоваться изменить определение вашего пользовательского слоя и разделить входные данные обратно при необходимости.

...