2016-09-29 4 views
0

tf.nn.seq2seq.sequence_loss_by_example에 대해 체중 텐서를 만들고 싶습니다. 저는 RNN-LSTM을 최대 100 걸음 씩 사용하고 각 배치 항목을 최대 단계 (100)로 제로 패딩했습니다.tensorflow sequence_loss_by_example weight

로지와 라벨의 모양은 다음과 같습니다.

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)는 클래스 번호이고, I는 Tensorflow 의해 제공된 ptb_word_lm.py 코드처럼 sequence_loss_by_example로 전달하고있다. 내 logits와 라벨이 제로 패딩 때문에 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)]) 

그러나, 손실이 올바르지 않습니다. 이 대답에서 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)의 배치 길이 정보 [1 내지 3, 10, 2, 3, 공급 물().

내가 생각할 수있는 한 가지 방법은 x_len을 반복하고 각 항목을 각 가중치의 마지막 1의 인덱스로 사용하는 것입니다.

[0 0 0 0 0 0 0 0 ....] => [1 1 1 ... 1 0 0 0 0]

100 (최대 시간 간격)의 크기와 중량

텐서

하지만 알다시피 나는 아직 먹이지 않았기 때문에 색인 용 텐서 내부의 값을 사용할 수 없습니다.

어떻게 이런 체중 텐서를 만들 수 있습니까?

+0

[link] (http://stackoverflow.com/questions/34128104/tensorflow-creating-mask-of-varied-lengths)와 [link] (https : //github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/dynamic_rnn.py) 문제가 해결되었습니다. 각 최대 단계의 인덱스를 만들고이를 마스크 처리 할 수 ​​있습니다. – 63coldnoodle

+0

질문에 답변으로 표시해 주시겠습니까? –

답변