将多维 pytorch 张量拆分为 "n" 个更小的张量

Split a multiple dimensional pytorch tensor into "n" smaller tensors

假设我有一个 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 的张量?

您可以使用以下方式访问第 i 个拆分:

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

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

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

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

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

torch.unfold(dimension, size, step)