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))