我想训练张量流中的双向LSTM来执行序列分类问题(情绪分类) .
因为序列具有可变长度,所以批次通常用零向量填充 . 通常,我在单向RNN中使用sequence_length参数来避免对填充向量进行训练 .
如何通过双向LSTM进行管理 . “sequence_length”参数是否自动从向后方向的序列中的高级位置开始?
谢谢
bidirectional_dynamic_rnn 还有一个 sequence_length 参数,用于处理可变长度序列 .
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
在正向传递中,rnn单元将在 sequence_length 处停止,这是输入的无填充长度,并且是 tf.nn.bidirectional_dynamic_rnn 中的参数 . 在向后传递中,它首先使用函数 tf.reverse_sequence 来反转第一个 sequence_length 元素,然后像前向传递中那样遍历 .
tf.nn.bidirectional_dynamic_rnn
tf.reverse_sequence
https://tensorflow.google.cn/api_docs/python/tf/reverse_sequence
此操作首先沿维度batch_axis切片输入,对于每个切片i,沿着维度seq_axis反转第一个seq_lengths [i]元素 .
2 回答
bidirectional_dynamic_rnn
还有一个sequence_length
参数,用于处理可变长度序列 .https://www.tensorflow.org/api_docs/python/tf/nn/bidirectional_dynamic_rnn(mirror):
你可以在这里看到一个例子:https://github.com/Franck-Dernoncourt/NeuroNER/blob/master/src/entity_lstm.py
在正向传递中,rnn单元将在
sequence_length
处停止,这是输入的无填充长度,并且是tf.nn.bidirectional_dynamic_rnn
中的参数 . 在向后传递中,它首先使用函数tf.reverse_sequence
来反转第一个sequence_length
元素,然后像前向传递中那样遍历 .https://tensorflow.google.cn/api_docs/python/tf/reverse_sequence