2

我想在填充序列上执行反向 LSTM,这需要在没有填充的情况下反转输入序列。

对于这样的批次(其中_代表填充):

a b c _ _ _
d e f g _ _
h i j k l m

如果想得到:

c b a _ _ _
g f e d _ _
m l k j i h

TensorFlow 有一个函数tf.reverse_sequence,它接受输入张量和批次中序列的长度并返回反向批次。在 Pytorch 中是否有一种简单的方法?

4

1 回答 1

4

不幸的是,还没有直接的等价物,尽管它已被请求

我还查看了整个PackedSequence对象,但它没有.flip()定义任何操作。假设您已经有必要的数据来提供长度,如您所建议的,您可以使用此函数实现它:

def flipBatch(data, lengths):
    assert data.shape[0] == len(lengths), "Dimension Mismatch!"
    for i in range(data.shape[0]):
        data[i,:lengths[i]] = data[i,:lengths[i]].flip(dims=[0])

    return data

不幸的是,这仅在您的序列是二维的(带有batch_size x sequence)时才有效,但您可以轻松地扩展它以满足您的特定输入要求。这已经或多或少地涵盖了上述链接中的提案,但我将其更新为今天的标准。

于 2019-04-29T16:01:09.060 回答