1

Tensorflow プラットフォームで LSTM ベースの seq2seq モデルを学習しています。与えられた単純な seq2seq の例でモデルをうまくトレーニングできます。

ただし、特定のシーケンスから一度に 2 つのシーケンスを学習する必要がある場合 (たとえば、現在のシーケンスから前のシーケンスと次のシーケンスを同時に学習する場合)、どのようにそれを行うことができますか。つまり、シーケンスとバックプロパゲートの両方から結合誤差を計算します。両方のシーケンスに同じエラー?

私が使用している 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))
4

1 に答える 1

0

単一のエンコーダーと複数のデコーダー (たとえば、2 つの出力シーケンスに対して 2 つ) が必要だと思われますよね? まさにこのユースケースの seq2seq にはone2manyがあります。

損失に関しては、両方のシーケンスからの損失を追加するだけでよいと思います。それとも、何らかの方法でそれらに重みを付けたいですか?それらを足し合わせて、追加された損失が唯一の損失であるかのように、勾配やその他すべてを計算するのは良い考えだと思います。

于 2016-08-02T20:19:17.133 に答える