Pytorch 广播两个张量的乘积
Pytorch broadcasting product of two tensors
我想将两个张量相乘,这是我得到的:
A
形状的张量 (20, 96, 110)
B
形状的张量 (20, 16, 110)
第一个索引是批量大小。
我想做的基本上是从 B
- (20, 1, 110)
中获取每个张量,例如,我想乘以每个 A
张量 (20, n, 110)
。
所以产品将在最后:张量 AB
其形状为 (20, 96 * 16, 110)
.
所以我想通过 B
广播来乘以 A
中的每个张量。
PyTorch 中是否有方法可以做到这一点?
使用torch.einsum
followed by torch.reshape
:
AB = torch.einsum("ijk,ilk->ijlk", (A, B)).reshape(A.shape[0], -1, A.shape[2])
示例:
import numpy as np
import torch
# A of shape (2, 3, 2):
A = torch.from_numpy(np.array([[[1, 1], [2, 2], [3, 3]],
[[4, 4], [5, 5], [6, 6]]]))
# B of shape (2, 2, 2):
B = torch.from_numpy(np.array([[[1, 1], [10, 10]],
[[2, 2], [20, 20]]]))
# AB of shape (2, 3*2, 2):
AB = torch.einsum("ijk,ilk->ijlk", (A, B)).reshape(A.shape[0], -1, A.shape[2])
# tensor([[[ 1, 1], [ 10, 10], [ 2, 2], [ 20, 20], [ 3, 3], [ 30, 30]],
# [[ 8, 8], [ 80, 80], [ 10, 10], [ 100, 100], [ 12, 12], [ 120, 120]]])
我想将两个张量相乘,这是我得到的:
A
形状的张量(20, 96, 110)
B
形状的张量(20, 16, 110)
第一个索引是批量大小。
我想做的基本上是从 B
- (20, 1, 110)
中获取每个张量,例如,我想乘以每个 A
张量 (20, n, 110)
。
所以产品将在最后:张量 AB
其形状为 (20, 96 * 16, 110)
.
所以我想通过 B
广播来乘以 A
中的每个张量。
PyTorch 中是否有方法可以做到这一点?
使用torch.einsum
followed by torch.reshape
:
AB = torch.einsum("ijk,ilk->ijlk", (A, B)).reshape(A.shape[0], -1, A.shape[2])
示例:
import numpy as np
import torch
# A of shape (2, 3, 2):
A = torch.from_numpy(np.array([[[1, 1], [2, 2], [3, 3]],
[[4, 4], [5, 5], [6, 6]]]))
# B of shape (2, 2, 2):
B = torch.from_numpy(np.array([[[1, 1], [10, 10]],
[[2, 2], [20, 20]]]))
# AB of shape (2, 3*2, 2):
AB = torch.einsum("ijk,ilk->ijlk", (A, B)).reshape(A.shape[0], -1, A.shape[2])
# tensor([[[ 1, 1], [ 10, 10], [ 2, 2], [ 20, 20], [ 3, 3], [ 30, 30]],
# [[ 8, 8], [ 80, 80], [ 10, 10], [ 100, 100], [ 12, 12], [ 120, 120]]])