2016-08-01 2 views
0

Я изучаю модель seq2seq на основе LSTM на платформе Tensorflow. Я могу очень хорошо обучить модель на данных простых примерах seq2seq.Как узнать две последовательности одновременно через LSTM в Tensorflow/TFLearn?

Однако, в тех случаях, когда мне приходится изучать сразу две последовательности из заданной последовательности (например, для изучения предыдущей последовательности и следующей последовательности из текущей последовательности одновременно), как мы можем это сделать, т.е. вычислить комбинированную ошибку из обе последовательности и backprogogate ту же ошибку для обеих последовательностей?

Вот фрагмент кода в код LSTM, который я использую (в основном взяты из примера РТВ: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/models/rnn/ptb/ptb_word_lm.py#L132):

 output = tf.reshape(tf.concat(1, outputs), [-1, size]) 
     softmax_w = tf.get_variable("softmax_w", [size, word_vocab_size]) 
     softmax_b = tf.get_variable("softmax_b", [word_vocab_size]) 
     logits = tf.matmul(output, softmax_w) + softmax_b 
     loss = tf.nn.seq2seq.sequence_loss_by_example(
      [logits], 
      [tf.reshape(self._targets, [-1])], 
      [weights]) 
     self._cost = cost = tf.reduce_sum(loss)/batch_size 
     self._final_state = state 
     self._lr = tf.Variable(0.0, trainable=False) 
     tvars = tf.trainable_variables() 
     grads, _ = tf.clip_by_global_norm(tf.gradients(cost, tvars),config.max_grad_norm) 
     optimizer = tf.train.GradientDescentOptimizer(self.lr) 
     self._train_op = optimizer.apply_gradients(zip(grads, tvars)) 

ответ

0

Мне кажется, что вы хотите иметь один кодер и несколько декодеров (например, 2 , для 2 выходных последовательностей), правильно? В этом случае используется one2many в seq2seq.

Что касается потери, я думаю, вы можете просто добавить потери от обеих последовательностей. Или вы хотите каким-то образом их веса? Я думаю, что это хорошая идея просто добавить их, а затем вычислить градиенты и все остальное, как будто добавленные потери были единственной потерей.

+0

Да, мне нужен один кодировщик и мультиуровневые декодеры. Я предполагаю, почему эта функция хранится в папке «test». По стоимости, на данный момент, я просто добавил затраты из всех последовательностей, как вы предложили. – user3480922

Смежные вопросы