在 Pytorch 中连接两个不同维度的张量
Concatenating two tensors with different dimensions in Pytorch
是否可以在不使用 for 循环的情况下连接两个不同维度的张量。
例如张量 1 的维度为 (15, 200, 2048),张量 2 的维度为 (1, 200, 2048)。是否可以沿着第一个张量中第一维的所有 15 个索引将第二个张量与第一个张量连接起来(沿着张量 1 的第一维广播第二个张量,同时沿着第一个张量的第三个维度连接)?生成的张量应具有维度 (15, 200, 4096)。
是否可以不用 for 循环来完成这个?
您可以手动进行广播(使用 Tensor.expand()
) before the concatenation (using torch.cat()
):
import torch
a = torch.randn(15, 200, 2048)
b = torch.randn(1, 200, 2048)
repeat_vals = [a.shape[0] // b.shape[0]] + [-1] * (len(b.shape) - 1)
# or directly repeat_vals = (15, -1, -1) or (15, 200, 2048) if shapes are known and fixed...
res = torch.cat((a, b.expand(*repeat_vals)), dim=-1)
print(res.shape)
# torch.Size([15, 200, 4096])
是否可以在不使用 for 循环的情况下连接两个不同维度的张量。
例如张量 1 的维度为 (15, 200, 2048),张量 2 的维度为 (1, 200, 2048)。是否可以沿着第一个张量中第一维的所有 15 个索引将第二个张量与第一个张量连接起来(沿着张量 1 的第一维广播第二个张量,同时沿着第一个张量的第三个维度连接)?生成的张量应具有维度 (15, 200, 4096)。
是否可以不用 for 循环来完成这个?
您可以手动进行广播(使用 Tensor.expand()
) before the concatenation (using torch.cat()
):
import torch
a = torch.randn(15, 200, 2048)
b = torch.randn(1, 200, 2048)
repeat_vals = [a.shape[0] // b.shape[0]] + [-1] * (len(b.shape) - 1)
# or directly repeat_vals = (15, -1, -1) or (15, 200, 2048) if shapes are known and fixed...
res = torch.cat((a, b.expand(*repeat_vals)), dim=-1)
print(res.shape)
# torch.Size([15, 200, 4096])