長さの異なるシーケンスのバッチに対してLSTMセルをトレーニングしています。 tf.nn.rnn
には非常に便利なパラメータsequence_length
がありますが、それを呼び出した後、バッチ内の各項目の最後のタイムステップに対応する出力行を選択する方法がわかりません。次のように私のコードは基本的にテンソルフローから最後の有効な出力値を取得する方法RNN
:
lstm_cell = tf.nn.rnn_cell.LSTMCell(num_lstm_units, input_size)
lstm_outputs, state = tf.nn.rnn(lstm_cell, input_list, dtype=tf.float32, sequence_length=sequence_lengths)
lstm_outputs
は、各時間ステップにおけるLSTM出力とのリストです。ただし、バッチ内の各アイテムの長さが異なるため、バッチ内の各アイテムに有効な最後のLSTM出力を含むテンソルを作成したいと考えています。
私はnumpyのインデックスを使用することができれば、私はちょうどこのようなものだろう:
all_outputs = tf.pack(lstm_outputs)
last_outputs = all_outputs[sequence_lengths, tf.range(batch_size), :]
をしかし、それは(私がfeature requestの承知している)時間tensorflowがそれをサポートしていない始めることが判明。
どうすればこれらの値を取得できますか?
ええ、それは間違いなく素敵な解決策ではないでしょう。しかし、今私は他の方法を見ることはできません。 – erickrf
もっと良い方法はありますか? – Zhao