Мой вопрос: действительно ли tf.nn.dynamic_rnn
и keras.layers.RNN(cell)
идентичны, как указано в документах ?
Я планирую создать RNN, однако кажется, что tf.nn.dynamic_rnn
является деприминировали в пользу Кераса.
В частности, в нем говорится, что:
Предупреждение: ДАННАЯ ФУНКЦИЯ УСТАРЕЛА. Он будет удален в будущей версии. Инструкции по обновлению: используйте keras.layers.RNN (ячейка), что эквивалентно этому API
Но я не понимаю, насколько API эквивалентны в случае переменной длины последовательности!
В необработанном TF мы можем указать тензор формы (batch_size, seq_lengths)
. Таким образом, если наша последовательность [0, 1, 2, 3, 4]
, а самая длинная последовательность в пакете имеет размер 10, мы можем дополнить ее нулями и [0, 1, 2, 3, 4, 0, 0, 0, 0, 0]
, мы можем сказать seq_length=5
для обработки [0, 1, 2, 3, 4]
.
Однако в Керасе это не так! Что мы можем сделать, так это указать mask_zero=True
в предыдущих слоях, например. слой внедрения. Это также замаскирует первый ноль!
Я могу обойти это, добавив единицы ко всему вектору, но тогда это дополнительная предварительная обработка, которую мне нужно выполнить после обработки с использованием tft.compute_vocabulary()
, который отображает словарные слова на 0 индексированный вектор.
keras
илиtf.keras
? - person MPękalski   schedule 15.03.2019seq_lengths
). Из документации ... Так что это больше для производительности, чем для правильности. - person rst   schedule 15.03.2019tf.keras.layers.Masking()
, чтобы справиться с этим, но дело в том, что маскирование не поддерживаетсяCuDNN RNN
. Возможно проблема решится в TF. 2.0 github.com/tensorflow/tensorflow/issues/23269 - person Nicolabo   schedule 10.04.2019