Что делает оператор & в PyTorch и почему он меняет форму? - PullRequest
0 голосов
/ 04 января 2019

У меня есть код, который содержит x и y, оба типа torch.autograd.variable.Variable.Их форма

torch.Size([30, 1, 9])
torch.Size([1, 9, 9])

Я не понимаю, почему следующее приводит к другому размеру / форме

z = x & y
print(z.shape)

, который выдает

torch.Size([30, 9, 9])

Почему форма z 30 * 9 * 9, после x & y?Форма x равна 30 * 1 * 9, а форма y равна 1 * 9 * 9, что делает & в x & y?

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Это не имеет ничего общего с оператором &, но с тем, как вещание работает в Python.Процитируем превосходную документацию Эрика Визера о вещании в NumPy:

Чтобы вещать, размер конечных осей для обоих массивов в операции должен быть либо одинаковым, либоодин из них должен быть один.

В качестве примера см. Следующее изображение со страницы цитирования:

Broadcasting of tensors of different shape.

Это приводит к вашей проблеме следующим образом:

  • a имеет форму 30 x 1 x 9
  • b имеет форму 1 x 9 x 9

Следовательно, результатсоздано следующим образом:

  • result1 равно a1, потому что a1 > b1
  • result2 равно b2, потому что a2 < b2
  • *Значение 1040 * равно a3 и b3, поскольку a3 = b3

Следовательно, result имеет форму 30 x 9 x 9.

Обратите внимание, что *Оператор 1050 * реализует логическое соединение для двоичного кодирования элементов тензоров.

0 голосов
/ 04 января 2019

Я не уверен, но мое лучшее предположение - & принимает наибольшее значение для каждого элемента в массиве.Чтобы быть уверенным, попробуйте поискать оператор & в документации к pytorch.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...