Я хочу реализовать DA-RNN в этой статье . На странице 3 исследовательской работы рассказывается о сети кодировщиков. В частности, я хочу реализовать следующие уравнения:
Я хочу подтвердить, что в приведенном выше уравнении мне требуется состояние ячейки s
на каждом временном шаге? Обычно в RNN нам просто нужно состояние ячейки с предыдущего временного шага. Так что я имею в виду, что если у нас есть пакет из 5 временных меток, мы используем скрытое состояние h
на всех временных шагах от 1 to 5
и используем состояние ячейки s
только с 5-го временного шага (и не для всех временных шагов).
Функция out,s = dynamic_rnn
в тензорном потоке также дает мне этот вывод, где out
будет иметь скрытые состояния, вычисленные на каждом временном шаге, а s
будет кортежем c
и h
на последнем временном шаге. Например, если мой ввод имеет размер batch_size x max_timestep x num_features
и, скажем, max_timestep=5
, тогда s.c
и s.h
будут состоять из состояния ячейки и скрытого состояния с 5-го временного шага, а не для временных шагов 1,2,3,4
. Однако в статье общее обозначение - состояние ячейки s
во время t-1
. Поэтому, если мы говорим о 5 временных шагах, нам нужно состояние ячейки s
при временных шагах 1,2,3,4
, которое я не могу получить с помощью функции dynamic_rnn
.
Итак, подведем итог
- верно ли мое предположение, что мне нужно состояние ячейки
s
для всех временных шагов, чтобы реализовать приведенное выше уравнение на изображении?
- Если да, как я могу сделать это в tenorflow? Должен ли я написать свою собственную оболочку LSTM?
Обновление:
Этот ответ решил мою проблему. Я обнаружил, что прямой функции для получения состояний ячеек на каждом временном шаге нет, однако мы можем обернуть ячейку RNN и просто передать ее в качестве входных данных для функции dynamicRNN
в tf.