当前位置: 首页 > 知识库问答 >
问题:

Pytorch的压缩序列/填充序列垂直填充张量,以获得张量列表

程英资
2023-03-14

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

例如,序列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_sequence函数(这也适用于pack_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]]])

填充物似乎是垂直的,而不是我所期望的。我如何得到我需要的正确填充?

共有1个答案

何修能
2023-03-14

简单地改变

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*如果True,或在T x B x*否则,其中

B是批量大小。它等于序列中的元素

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
 类似资料:
  • 我正在制作一组自定义swing组件,这些组件实现各种属性,如标志或。我在尝试填充各种自定义组件的,然后根据每个组件的对列表进行排序时遇到问题。 我试图做到这一点的方法是让我的组件实现一个名为的接口,该接口实现一个方法。然后使用我的

  • 我正在比较填充整数列表所需的时间与整数向量。 每个矢量 令我惊讶的是,填充列表比填充整数向量快100倍。我希望填充整数的向量要快得多,因为向量在内存中是连续的,插入要快得多。 填充列表怎么会比填充向量快100倍而不是10倍呢?我肯定我缺少一些导致这种情况的概念或想法。 这是我用来生成结果的代码 有人能给我解释一下为什么会这样吗???

  • 问题内容: 希望有人可以帮助我编写SQL脚本或函数。 我有一个数据源,我希望该功能通过并基于2个指定的列填充相关列。 因此,名称和值列。 例如 因此,脚本/函数应该为数据源的每一行分别在a,b,c,d列中填充值2,1、3、5。 这可能吗?如果是这样,有人可以教我如何做。 问题答案: Oracle安装程序 : 更新声明 : 输出 : Oracle安装程序 : 插入语句 : 输出 :

  • 我有一个缺少“SNAP_ID”值的数据帧。我想根据前一个非缺失值(lag()?)的序列,用浮点值填充缺失值。如果可能的话,我真的想只用dplyr来实现这一点。 假设: 永远不会有丢失的数据,因为第一行或最后一行我根据数据集的最小值和最大值之间的缺失天数生成缺失的日期 数据集中可能存在多个空白 当前数据: 我想要实现的目标: 作为数据帧: 这是我实现这个目标的尝试,但它只适用于第一个缺失的值: 来自

  • 在多列容器中,如果显式设置了容器的高度,往往会由于内容不足,而导致最后面的列没有内容填充,就会出现各列高度不一致的情况。 这种情况下,就可以通过 column-fill属性来控制各列内容的填充方式,可选值为 auto | balance。balance 表示各列的内容均衡填充,auto 表示各列的内容自动填充。 由于多列布局还没有成为正式标准,各浏览器的默认填充方式也没有得到统一。Firefox

  • 我正站在悬崖边,即将做出一个重要的决定,这将影响我们关于Bootstrap的长期发展,我想确保我对他们使用列填充背后的原因有一个很好的理解。 我们运行一个多租户cms系统,该系统提供引导作为构建站点的可用框架之一,然后我们的系统在其上添加功能层,因此我们所做的任何决定都会影响所有租户。 其中一个基本特性是,当使用Bootstrap列(即),或者我们称之为时,用户可以选择将内部内容流血到边缘,或者被