如何在Tensorflow / TFLearn中通过LSTM同时学习两个序列?

时间:2016-08-01 14:47:16

标签: python tensorflow deep-learning lstm language-model

我正在Tensorflow平台上学习基于LSTM的seq2seq模型。我可以在给定的简单seq2seq示例上训练模型。

然而,在我必须从给定序列一次学习两个序列的情况下(例如:同时学习当前序列中的前一序列和下一序列),我们怎样才能这样做,即计算两者的组合误差序列和backpropogate相同的错误到两个序列?

以下是我正在使用的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))

1 个答案:

答案 0 :(得分:0)

在我看来,你想拥有一个编码器和多个解码器(例如2个,用于2个输出序列),对吧?对于这个用例,seq2seq中有one2many

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