Как получить прогнозируемый результат декодера в Tensorflow? - PullRequest
0 голосов
/ 29 марта 2019

Я использую Tensorflow для построения сети RNN-Encoder-Decoder. Но я путаюсь с RNNCell. В учебнике Tensorflow сказано, что:

Это определение ячейки отличается от определения, используемого в литературе. В литературе «ячейка» относится к объекту с одним скалярным выводом. Это определение относится к горизонтальному массиву таких единиц.

от https://www.tensorflow.org/api_docs/python/tf/nn/rnn_cell/RNNCell

В сети декодера вход каждого rnncell - это скрытое состояние предыдущей ячейки и реальный результат предсказания предыдущей ячейки. Расчет потерь - это разница между логинами предсказания и реальной меткой. На рисунке ниже показан процесс.

Мой вопрос заключается в том, является ли вывод RNNCell горизонтальным массивом единиц, описанным выше. Тогда как построить сеть декодеров в Tensorflow?

Мой код выглядит следующим образом:

# the shape of real_y is [batch_size, time_steps]
# the shape of the encoder_outputs is  [batch_size, encoder_units]
def decode(real_y, encoder_outputs, training=True):

   # initial decoder input
   output = tf.zeros((real_y.shape[0], 1))
   state  = encoder_outputs

   time_steps = real_y.shape[1]

   # loop the time step:
   for i in range(time_steps):
      logit, state = self.rnncell(output, state)

      loss = loss(logit, real_y[i])

      output = real_y[i]

Этот код правильный? Согласно учебнику, я так не думаю. Поскольку вывод self.rnncell(output, state) не является скалярным значением. Я думаю, что у меня нет никаких средств, чтобы соединить ячейки деокодера по предсказанному результату. Где-нибудь, где я могу найти пример кода декодера, подобный этому?

...