分批划分 3D 张量 (Pytorch)
Division in batches of a 3D tensor (Pytorch)
我有一个大小为 100x5x2 的 3D 张量,横跨轴的张量的平均值 = 1,其形状为 100x2。
这里的 100 是批量大小。通常没有批次,形状为 5x2 和 2 的张量的除法工作得很好,但是对于有批次的 3D 张量,我收到错误。
a = torch.rand(5,2)
b = torch.rand(2)
z=a/b
给了我预期的答案。
a = torch.rand(100,5,2)
b = torch.rand(100,2)
z=a/b
给我以下错误。
张量 a (5) 的大小必须与非单维 1 处的张量 b (100) 的大小匹配。
如何划分这些张量以使我的输出形状为 100x5x2?像 bmm 这样的除法?
只需执行:
z = a / b.unsqueeze(1)
这在 b
中添加了一个额外的维度,并使其形状为 (100, 1, 2),与 a
的广播兼容。
我有一个大小为 100x5x2 的 3D 张量,横跨轴的张量的平均值 = 1,其形状为 100x2。 这里的 100 是批量大小。通常没有批次,形状为 5x2 和 2 的张量的除法工作得很好,但是对于有批次的 3D 张量,我收到错误。
a = torch.rand(5,2)
b = torch.rand(2)
z=a/b
给了我预期的答案。
a = torch.rand(100,5,2)
b = torch.rand(100,2)
z=a/b
给我以下错误。
张量 a (5) 的大小必须与非单维 1 处的张量 b (100) 的大小匹配。
如何划分这些张量以使我的输出形状为 100x5x2?像 bmm 这样的除法?
只需执行:
z = a / b.unsqueeze(1)
这在 b
中添加了一个额外的维度,并使其形状为 (100, 1, 2),与 a
的广播兼容。