Pytorch的压缩序列/pad序列垂直放置张量作为张量列表

2024-04-26 00:07:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试填充LSTM mini批处理的张量序列,其中序列中的每个时间步都包含一个子张量列表(表示单个时间步中的多个特征)。你知道吗

例如,序列1有3个时间步,每个时间步中有2个特性。下面的例子是:

序列1=[[1,2],[2,2],[3,3],[3,2],[3,2]]

序列2=[[4,2],[5,1],[4,4]]

序列3=[[6,9]]

我运行pytorch的pad\u sequence函数(这也适用于pack\u sequence),如下所示:

import torch
import torch.nn.utils.rnn as rnn_utils

a = torch.tensor([[1,2],[2,2],[3,3],[3,2],[3,2]])
b = torch.tensor([[4,2],[5,1],[4,4]])
c = torch.tensor([[6,9]])
result = rnn_utils.pad_sequence([a, b, c])

我的预期产出如下:

序列1=[[1,2],[2,2],[3,3],[3,2],[3,2]]

序列2=[[4,2],[5,1],[4,4],[0,0],[0,0]]

序列3=[[6,9],[0,0],[0,0],[0,0],[0,0]]

但是,我得到的结果如下:

tensor([[[1, 2],
         [4, 2],
         [6, 9]],

        [[2, 2],
         [5, 1],
         [0, 0]],

        [[3, 3],
         [4, 4],
         [0, 0]],

        [[3, 2],
         [0, 0],
         [0, 0]],

        [[3, 2],
         [0, 0],
         [0, 0]]])

填充物似乎是垂直的,而不是我所期望的。我怎样才能得到我需要的正确的填充物呢?你知道吗


Tags: import列表时间序列utilstorch特征特性
1条回答
网友
1楼 · 发布于 2024-04-26 00:07:27

简单的改变

result = rnn_utils.pad_sequence([a, b, c])

result = rnn_utils.pad_sequence([a, b, c], batch_first=True)
seq1 = result[0]
seq2 = result[1]
seq3 = result[2]

默认情况下,batch_first为False。如果为真,输出将在B x T x *中,否则在T x B x *中,其中

B是批大小。它等于sequences中的元素数

T是最长序列的长度,并且

*是任意数量的尾随维度,包括无。你知道吗

输出:

tensor([[1, 2],
        [2, 2],
        [3, 3],
        [3, 2],
        [3, 2]]) # sequence 1
tensor([[4, 2],
        [5, 1],
        [4, 4],
        [0, 0],
        [0, 0]]) # sequence 2
tensor([[6, 9],
        [0, 0],
        [0, 0],
        [0, 0],
        [0, 0]]) # sequence 3

相关问题 更多 >

    热门问题