Проблема возникает из-за использования PyTorch 0.1 . При использовании PyTorch 1.0.1 та же операция NumPy обобщается на PyTorch без каких-либо изменений и проблем. Вот снимок пробега в Колабе.
Как мы видим, мы действительно получаем те же результаты.
Вот попытка воспроизвести ошибку, с которой вы столкнулись при получении неверного результата:
>>> t1 = torch.from_numpy(a)
>>> t2 = torch.from_numpy(b)
>>> t1[np.newaxis, ...] - t2[:, np.newaxis, ...]
(0 ,.,.) =
-2 -2 -2
-1 2 4
[torch.LongTensor of size 1x2x3]
>>> torch.__version__
'0.1.12_1'
Итак, пожалуйста, обновите вашу версию PyTorch до 1.0.1 !
Подробнее о деталях:
Основная причина, по которой он не работал в PyTorch версии 0.1 , заключается в том, что вещание тогда не было полностью реализовано. По сути, повышение тензора до 3D с последующим вычитанием может быть выполнено в два этапа, как в (в версии 1.0.1 ):
>>> t1[:1, ] - t2
>>> tensor([[-2, -2, -2], # t1_r1
[-4, -1, 1]]) # t1_r2
>>> t1[1:, ] - t2
>>> tensor([[ 1, 1, 1], # t2_r1
[-1, 2, 4]]) # t2_r2
Результаты вышеупомянутых двух операций, скомпонованных путем наложения строк в порядке (t1_r1, t2_r1, t1_r2, t2_r2), после того, как каждая из строк, являющаяся 2D, даст нам форму (2, 2, 3)
.
Теперь попробуйте выполнить вышеупомянутые два шага в версии 0.1, она выдаст ошибку:
RuntimeError: несоответствующий размер тензора в /opt/conda/conda-bld/pytorch_1501971235237/work/pytorch-0.1.12/torch/lib/TH/generic/THTensorMath.c:831