2016-08-01 30 views
0

Ich lerne LSTM-basierte Seq2seq-Modell in Tensorflow-Plattform. Ich kann sehr gut ein Modell auf einem gegebenen einfachen seq2seq Beispielen trainieren.Wie kann man zwei Sequenzen simultan durch LSTM in Tensorflow/TFLearn lernen?

Wenn ich jedoch zwei Sequenzen gleichzeitig aus einer gegebenen Sequenz lernen muss (zB: vorherige Sequenz und nächste Sequenz gleichzeitig aus der aktuellen Sequenz lernen), wie können wir das machen, dh den kombinierten Fehler berechnen aus beide Sequenz und Backpropagate den gleichen Fehler für beide Sequenzen?

Hier ist das Snippet zum LSTM Code, den ich verwende (meist aus ptb Beispiel genommen: 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)) 

Antwort

0

Es scheint mir, dass Sie einen einzigen Encoder und mehrere Decoder haben wollen (zB 2 , für 2 Ausgabesequenzen), oder? Für genau diesen Anwendungsfall gibt es in seq2seq one2many.

Wie für Verlust, ich denke, Sie können nur die Verluste aus beiden Sequenzen hinzufügen. Oder willst du sie irgendwie belasten? Ich denke, es ist eine gute Idee, sie einfach hinzuzufügen und dann Gradienten und alles andere zu berechnen, als ob die zusätzlichen Verluste der einzige Verlust wären.

+0

Ja, ich brauche einen Encoder und mehrere Decoder. Ich vermute, warum diese Funktionalität im "Test" -Ordner beibehalten wird. Für die Kosten, ab sofort habe ich einfach die Kosten aller Sequenzen addiert, wie Sie vorgeschlagen haben. – user3480922