tf.nn.seq2seq.sequence_loss_by_exampleのウェイトテンソルを作りたいと思います。 私は最大100ステップでRNN-LSTMを使用しており、各バッチアイテムを最大ステップ(100)でゼロパディングしています。テンソルフローsequence_loss_by_exampleウェイト
私のロットとラベルの形は次のとおりです。
Tensor("dropout/mul_1:0", shape=(50000, 168), dtype=float32) # logits
Tensor("ArgMax:0", shape=(500, 100), dtype=int64) # labels
50000 500(BATCH_SIZE)×100(num_steps)用で、168はクラスの数である、と私はTensorflowによって提供さptb_word_lm.pyコードのようsequence_loss_by_exampleするためにそれらを渡しています。 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/models/rnn/ptb/ptb_word_lm.py
loss = tf.nn.seq2seq.sequence_loss_by_example(
[logits],
[tf.reshape(labels, [-1])],
[tf.ones([cf.batch_size * cf.max_time_steps], dtype=tf.float32)])
私logitsとラベルがゼロ詰めされているのでしかし、損失が間違っています。この回答から、https://stackoverflow.com/a/38502547/3974129、私はtf.ones([..])部分を重量テンソルに変更しようとしましたが、それらの根底にある条件は私のものと大きく異なっています。
私は以下のようなステップの長さの情報を持っており、トレーニングの際にそれらをフィードします。例えば
self._x_len = tf.placeholder(tf.int64, shape=[self._batch_size])
、I)は、それらはまた(tf.nn.rnnにsequence_lengthために使用されるサイズ5のバッチについて[3、10、2、3、1]の長さの情報を供給します。
私が考えることのできる1つの方法は、x_lenを反復し、各項目を各重みの最後の1のインデックスとして使用することです。 100の大きさ(最大タイムステップ)と
[0 0 0 0 0 .... 0 0] => [1 1 1 ... 1 0 0 0]
質量テンソル
しかし、あなたが知っているように、私はテンソル内の値をインデックスとして使用することはできません。
どうすればこのような体重テンソルを作成できますか?
[リンク](http://stackoverflow.com/questions/34128104/tensorflow-creating-mask-of-varied-lengths)と[リンク](https ://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/dynamic_rnn.py)、問題解決済み。 私は各最大ステップのインデックスを作成し、それらをマスクすることができます。 – 63coldnoodle
質問に回答してください。 –