bidirectional_dynamic_rnn的输出?

时间:2018-03-13 22:32:11

标签: tensorflow lstm rnn

我使用bidirectional_dynamic_rnn处理可变长度句子的分类任务。这是我的代码的一部分:

lstm_fw_cell=rnn.BasicLSTMCell(hidden_size)
lstm_bw_cell=rnn.BasicLSTMCell(hidden_size)
lstm_fw_cell=rnn.DropoutWrapper(lstm_fw_cell,output_keep_prob=self.dropout_rate)
lstm_bw_cell=rnn.DropoutWrapper(lstm_bw_cell,output_keep_prob=self.dropout_rate)
outputs,_=tf.nn.bidirectional_dynamic_rnn(lstm_fw_cell,lstm_bw_cell,inputs=self.word_embeddings,sequence_length=self.text_len,dtype=tf.float32)
output_rnn=tf.concat(outputs,axis=2)

output_rnn的形状是(50,100,200),即(批量大小,max_length,2 *隐藏层大小)。因为我对所有句子都使用了零填充,在这种情况下,短句填充为100个单词。 text_len是每个批次的长度列表。我希望output_rnn删除零,只输出最后一层。例如,句子1有35个单词,所以输出只计算35个单词,句子2有72个单词,所以输出只计算72个单词,句子3个有21个单词,所以输出只计算21个单词,并删除22个100个单词都是零。这该怎么做?

我使用了self.output_rnn_last=output_rnn[:,-1,:]但是在这种情况下,它计算了100个单词,它们是零,我希望根据序列长度来计算值。

0 个答案:

没有答案