【问题标题】:How to pad sequences with variable length in more than 1 dimension in pytorch?如何在pytorch中填充长度超过一维的可变序列?
【发布时间】:2022-12-04 08:02:29
【问题描述】:

有什么干净的方法可以在 pytorch 中创建一批 3D 序列吗?我有形状为 (sequence_length_lvl1, sequence_length_lvl2, D) 的 3D 序列,这些序列的 sequence_length_lvl1 和 sequence_length_lvl2 具有不同的值,但它们都具有相同的 D 值,我想在第一维和第二维中填充这些序列,并且创建一批,但我不能使用 pytorch pad_sequence 函数,因为它仅在序列仅在一个维度上具有可变长度时才有效。我想问问是否有人知道任何干净的方法来做到这一点?

为了更清楚,我提供了一个例子。 假设输入序列类似于:

input1 = [
[[1, 1, 1], [2, 2, 2], [3, 3, 3]], 
[[4, 4, 4], [5, 5, 5]]
]

input2 = [
[[1, 1, 1], [2, 2, 2], [3, 3, 3]], 
[[6, 6, 6]],
[[4, 4, 4], [5, 5, 5]]
]

我想填充 [input1, input2]。所需的输出将是:

output = [
[[[1, 1, 1], [2, 2, 2], [3, 3, 3]], 
[[4, 4, 4], [5, 5, 5], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]],

[[[1, 1, 1], [2, 2, 2], [3, 3, 3]], 
[[6, 6, 6], [0, 0, 0], [0, 0, 0]],
[[4, 4, 4], [5, 5, 5], [0, 0, 0]]]
]

因此,所需的输出具有 (2, 3, 3, 3) 的形状。

【问题讨论】:

  • 添加示例输入和所需的输出!!!
  • @I'mahdi 完成了!!
  • 你总是想要(2,3,3,3)吗?
  • 不,这只是一个例子。输入的第一维和第二维可以不同,但​​没有特定的预定义值。 @我是马赫迪
  • 你不能拥有这两个数组,因为维度不同,试试这个:np.array([[[1, 1, 1], [2, 2, 2], [3, 3, 3]], [[4, 4, 4], [5, 5, 5]]]) 你会收到这个警告:ndarrays with different lengths or shapes)

标签: python deep-learning pytorch lstm


【解决方案1】:

这适用于您的示例,也许有更快的方法。

input1 = [
    [[1, 1, 1], [2, 2, 2], [3, 3, 3]],
    [[4, 4, 4], [5, 5, 5]]
    ]

input2 = [
    [[1, 1, 1], [2, 2, 2], [3, 3, 3]],
    [[6, 6, 6]],
    [[4, 4, 4], [5, 5, 5]]
    ]

len_max = max(len(input1), len(input2))
output_val = [[], []]
no_val = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

for i in range(len_max):
    try:
        a = []
        a = input1[i]
    except Exception:
        a = no_val

    add_empty = 3 - len(a)
    for j in range(add_empty):
        a += [[0, 0, 0]]

    try:
        b = []
        b = input2[i]
    except Exception:
        b = no_val

    add_empty = 3 - len(b)
    for j in range(add_empty):
        b += [[0, 0, 0]]

    output_val[0] += [a]
    output_val[1] += [b]

print('-------------
', output_val)

【讨论】:

    猜你喜欢
    • 2019-02-13
    • 1970-01-01
    • 2021-01-29
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    相关资源
    最近更新 更多