2017-10-07 70 views
1

我有一个让我困惑,我希望把它清除掉一些PyTorch例子。PyTorch广播失败。 “规则”后面

首先,按照PyTorch页,我希望这些例子工作,因为做自己numpy的等价物即these。第一个例子非常直观。这些广播是兼容的:

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 

Here is an excerpt which says this ought to work:

两张张是“宽阔的”稳定“如果下列规则成立:

  1. 每个张量至少有一个维度。
  2. 在遍历维度大小时,从尾随维度开始,维度大小必须等于,其中一个为1,或者其中一个不存在。

如果将张量转换为numpy数组,则算法按预期工作。

什么错?我是否误解了文档,如果是这样,哪种语法会得到相同的结果?

回答

0

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

In[2]: import torch 
In[3]: torch.__version__ 

Out[3]: '0.2.0_4'