2016-08-01 38 views
0

我在Tensorflow平台上学习基于LSTM的seq2seq模型。我可以在给定的简单seq2seq示例上训练模型。然而,在我必须从给定序列中同时学习两个序列(例如:同时学习当前序列的前一个序列和下一个序列)的情况下,我们如何做到这一点,即,计算组合误差从这两个序列和backpropogate相同的错误两个序列?如何通过Tensorflow/TFLearn中的LSTM同时学习两个序列?

这里的代码段,我现在用的是LSTM代码(主要来自PTB例如采取: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个输出序列),对吗?在这个用例中,seq2seq中有one2many

至于损失,我认为你可以只添加两个序列的损失。或者你想以某种方式来衡量它们?我认为只需添加它们,然后计算渐变和其他所有东西是一个好主意,就好像增加的损失是唯一的损失。

+0

是的,我需要一个编码器和多个解码器。我猜测为什么这个功能保存在'test'文件夹中。就目前而言,我的成本只是按照您的建议将所有序列的成本累加起来。 – user3480922