我想训练张量流中的双向LSTM来执行序列分类问题(情感分类)。
因为序列长度可变,所以批次通常用零向量填充。通常,我在单向RNN中使用sequence_length参数来避免对填充向量进行训练。
如何使用双向LSTM进行管理。是" sequence_length"参数工作是否自动从顺序中的高级位置开始向后移动?
谢谢
答案 0 :(得分:2)
bidirectional_dynamic_rnn
还有一个sequence_length
参数,用于处理可变长度的序列。
https://www.tensorflow.org/api_docs/python/tf/nn/bidirectional_dynamic_rnn(mirror):
sequence_length
:一个int32 / int64向量,大小为[batch_size],包含每个序列的实际长度。
您可以在此处查看示例:https://github.com/Franck-Dernoncourt/NeuroNER/blob/master/src/entity_lstm.py
答案 1 :(得分:0)
在正向传递中,rnn单元将在sequence_length
处停止,tf.nn.bidirectional_dynamic_rnn
是输入的无填充长度,并且是tf.reverse_sequence
中的参数。在向后传递中,它首先使用函数sequence_length
反转前batch_axis
个元素,然后像在向前传递中那样遍历。
https://tensorflow.google.cn/api_docs/python/tf/reverse_sequence
此op首先对沿维度
i
的输入进行切片,对于每个切片seq_lengths[i]
,将对沿维度seq_axis
的前lists:zip
元素进行反转。