Не могу понять о трансляции тензора pytorch

#python #pytorch

#python #pytorch

Вопрос:

У меня есть следующий код:

 import torch
d = 2
n = 50
X = torch.randn(n,d)
z = torch.tensor([[-1.0], [2.0]])
y = X @ z
X.size()
z.size()
y.size()
  

Вывод:

 torch.Size([50, 2])
torch.Size([2, 1])
torch.Size([50, 1])
  

Мой вопрос в том, почему после трансляции размер результата y является [50,1] , а не [50,2] , я думаю, что это должно быть [50,2] , я прав?

Ответ №1:

@ Это не трансляция, а умножение.

В Python 3.5 был введен @ оператор для умножения матриц, следующий за PEP465. Это реализовано, например, в numpy качестве matmul оператора.

Так что размер y в порядке.

умножение матрицы размера [50,2] на вектор размера [2,1] приведет к получению вектора размера [50,1] .

Пример, показывающий это более четко, является:

 import torch
xx = torch.ones(3, 2)
zz = torch.tensor([[-1.0], [2.0]])
yy = xx @ zz

print(xx)
print(zz)
print(yy)


# tensor([[1., 1.],
#         [1., 1.],
#         [1., 1.]])
# tensor([[-1.],
#         [ 2.]])
# tensor([[1.],
#         [1.],
#         [1.]])
  

Как вы можете видеть, третий вывод действительно является просто умножением 2 тензоров.

Если вы хотите выполнить трансляцию, я рекомендую вам обратиться к https://medium.com/ai³-theory-practice-business/understanding-broadcasting-in-pytorch-ca9e9533f05f

Комментарии:

1. Спасибо, я могу принять только через 3 минуты. Кстати, как я могу @ you, когда в вашем имени есть пробел? он же между «Джин» и «Ким» есть пробел. @Гванг-Джин Ким