PyTorch稀疏张量维数必须为nDimI + nDimV

时间:2018-02-23 04:36:27

标签: python machine-learning deep-learning pytorch tensor

我正在尝试在gd中插入值来协调[1,0]。以下是矩阵。当我尝试这个时,我得到一个RuntimeError。

>>> import torch
>>> cd = [[1, 0]]
>>> gd = [0.39613232016563416]
>>> i = torch.LongTensor(cd)
>>> v = torch.FloatTensor(gd)
>>> p = torch.rand(2)
>>> i

 1  0
[torch.LongTensor of size 1x2]

>>> v

 0.3961
[torch.FloatTensor of size 1]

>>> p

 0.4678
 0.0996
[torch.FloatTensor of size 2]

>>> torch.sparse.FloatTensor(i.t(), v, torch.Size(list(p.size()))).to_dense()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: invalid argument 2: number of dimensions must be nDimI + nDimV at /Users/soumith/code/builder/wheel/pytorch-src/torch/lib/THS/generic/THSTensor.c:169

1 个答案:

答案 0 :(得分:1)

两件事。

1)现在p是等级1的张量。要在位置[1,0]中插入一些内容,它必须是等级2的张量。

2)你不需要用稀疏张量做复杂的事情。只需p[cd[0], cd[1]] = v[0]即可。 cd = torch.LongTensor([row_idx, col_idx])

的位置

所以:

>>> cd = torch.LongTensor([1,0])
>>> gd = [0.39613232016563416]
>>> v = torch.FloatTensor(gd)
>>> p = torch.rand((2,2))
>>> p
 0.9342  0.8539
 0.7044  0.0823
     

[torch.FloatTensor,大小为2x2]

>>> p[cd[0], cd[1]] = v[0]
>>> p
0.9342  0.8539
0.3961  0.0823
     

[torch.FloatTensor,大小为2x2]

那很简单。