Pytorch эквивалент `tf.reverse_sequence`? - PullRequest
2 голосов
/ 29 апреля 2019

Я хотел бы сделать 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?

1 Ответ

3 голосов
/ 29 апреля 2019

К сожалению, прямого эквивалента пока нет, , хотя он был запрошен .

Я также изучил весь объект 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), но вы можете легко расширить это для ваших конкретных входных требований.Это уже более или менее охватывает предложение в приведенной выше ссылке, но я обновил его до сегодняшнего стандарта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...