Какова необходимая структура для начального состояния в многослойном / составном 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. "