PyTorch 广播失败。 "Rules" 跟随



我有几个PyTorch的例子让我感到困惑,希望能澄清一下。

首先,根据PyTorch页面,我希望这些例子能像它们的numpy等价物一样工作,即这些。第一个例子非常直观。这些兼容广播:

Image  (3d array): 256 x 256 x 3
Scale  (1d array):             3
Result (3d array): 256 x 256 x 3

举个例子:

torch.Tensor([[1,2,3]])/torch.Tensor([1,2,3])
Out[5]: 
1  1  1
[torch.FloatTensor of size 1x3]
torch.Tensor([[1,2,3]])/torch.Tensor([1,2,3])
Out[6]: 
1  1  1
[torch.FloatTensor of size 1x3]
torch.Tensor([[[1,2,3]]])/torch.Tensor([1,2,3])
Out[7]: 
(0 ,.,.) = 
1  1  1
[torch.FloatTensor of size 1x1x3]

然而,这是numpy示例的结果:

torch.randn(256,256,3)/torch.Tensor([1,2,3])
Traceback (most recent call last):
File "<ipython-input-12-4c328d453e24>", line 1, in <module>
torch.randn(256,256,3)/torch.Tensor([1,2,3])
File "/home/nick/anaconda3/lib/python3.6/site-packages/torch/tensor.py", line 313, in __div__
return self.div(other)
RuntimeError: inconsistent tensor size at /opt/conda/conda-bld/pytorch_1501971235237/work/pytorch-0.1.12/torch/lib/TH/generic/THTensorMath.c:873

以下是一段摘录,说明这应该有效:

如果以下规则成立,则两个张量是"可广播的":

  1. 每个张量至少有一个维度
  2. 从尾部维度开始迭代维度大小时,维度大小必须相等,其中一个为1,或者其中一个不存在

如果将张量转换为numpy数组,则运算会按预期进行。

怎么了?我是否误解了文档?如果是,是什么语法导致了相同的结果?

验证您使用的pytorch版本是否正确。它必须是0.2.0,这是pytorch中引入广播的时候。

In[2]: import torch
In[3]: torch.__version__
Out[3]: '0.2.0_4'

最新更新