Я использую 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)
не является скалярным значением. Я думаю, что у меня нет никаких средств, чтобы соединить ячейки деокодера по предсказанному результату. Где-нибудь, где я могу найти пример кода декодера, подобный этому?