【问题标题】:Split a multiple dimensional pytorch tensor into "n" smaller tensors将多维 pytorch 张量拆分为“n”个较小的张量
【发布时间】:2020-08-31 19:23:39
【问题描述】:

假设我有一个具有这种形状的 5D 张量,例如:(1, 3, 10, 40, 1)。我想根据某个维度将其拆分为较小的相等张量(如果可能),step 等于 1,同时保留其他维度。

假设我想根据第四维 (=40) 将其拆分,其中每个张量的大小等于 10。所以第一个 tensor_1 将具有 0->9 的值,tensor_2 将具有 1->10 的值等等。

39 个张量将具有这些形状:

Shape of tensor_1 : (1, 3, 10, 10, 1)
Shape of tensor_2 : (1, 3, 10, 10, 1)
Shape of tensor_3 : (1, 3, 10, 10, 1)
...    
Shape of tensor_39 : (1, 3, 10, 10, 1)

这是我尝试过的:

a = torch.randn(1, 3, 10, 40, 1)

chunk_dim = 10
a_split = torch.chunk(a, chunk_dim, dim=3)

这给了我 4 个张量。我该如何编辑它,这样我将有 39 个张量,步长 = 1,就像我解释的那样?

【问题讨论】:

  • 这些不是分裂,而是重叠张量

标签: python pytorch tensor


【解决方案1】:

这会创建我想要的重叠张量:

torch.unfold(dimension, size, step) 

【讨论】:

    【解决方案2】:

    您可以使用以下方式访问ith 拆分:

    a[:,:,:,i:i+10,:]
    

    例如,您的示例中的tensor_3 可以访问为:

    a[:,:,:,3:13,:]
    

    如果您需要创建这些拆分的副本列表,您可以运行一个循环并使用迭代器进行索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 2019-02-05
      • 2022-10-17
      • 2020-08-05
      相关资源
      最近更新 更多