#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, когда в вашем имени есть пробел? он же между «Джин» и «Ким» есть пробел. @Гванг-Джин Ким