Структура начального состояния для сложенного LSTM - PullRequest
3 голосов
/ 19 апреля 2019

Какова необходимая структура для начального состояния в многослойном / составном RNN в TensorFlow (1.13.1) с использованием tf.keras.layers.RNN API?

Я пробовал следующее:

lstm_cell_sizes = [256, 256, 256]
lstm_cells = [tf.keras.layers.LSTMCell(size) for size in lstm_cell_sizes]

state_init = [tf.placeholder(tf.float32, shape=[None] + cell.state_size) for cell in lstm_cells]

tf.keras.layers.RNN(lstm_cells, ...)(inputs, initial_state=state_init)

Это приводит к:

ValueError: Could not pack sequence. Structure had 6 elements, but flat_sequence had 3 elements.  Structure: ([256, 256], [256, 256], [256, 256]), flat_sequence: [<tf.Tensor 'player/Placeholder:0' shape=(?, 256, 256) dtype=float32>, <tf.Tensor 'player/Placeholder_1:0' shape=(?, 256, 256) dtype=float32>, <tf.Tensor 'player/Placeholder_2:0' shape=(?, 256, 256) dtype=float32>].

Если я заменю state_init на сплюснутый список тензоров с формой [None, 256], я получаю:

ValueError: An `initial_state` was passed that is not compatible with `cell.state_size`. Received `state_spec`=[InputSpec(shape=(None, 256), ndim=2), InputSpec(shape=(None, 256), ndim=2), InputSpec(shape=(None, 256), ndim=2)]; however `cell.state_size` is [[256, 256], [256, 256], [256, 256]]

The Документы Tensorflow RNN довольно расплывчаты в этом:

"Вы можете указать начальное состояние слоев RNN символически, вызвав их с ключевым словом аргумента initial_state. Значение initial_state должен быть тензором или списком тензоров, представляющих начальное состояние слоя RNN. "

...