Python PyTorch稀疏张量维数必须为nDimI+;nDimV
我试图在Python PyTorch稀疏张量维数必须为nDimI+;nDimV,python,machine-learning,deep-learning,pytorch,tensor,Python,Machine Learning,Deep Learning,Pytorch,Tensor,我试图在gd中插入值以协调[1,0]。以下是矩阵。当我尝试此操作时,会出现运行时错误 >>> import torch >>> cd = [[1, 0]] >>> gd = [0.39613232016563416] >>> i = torch.LongTensor(cd) >>> v = torch.FloatTensor(gd) >>> p = torch.rand(2) >&g
gd
中插入值以协调[1,0]
。以下是矩阵。当我尝试此操作时,会出现运行时错误
>>> 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
导入火炬
>>>cd=[[1,0]]
>>>gd=[0.39613232016563416]
>>>i=火炬长传感器(cd)
>>>v=火炬浮动张量(gd)
>>>p=火炬兰特(2)
>>>我
1 0
[尺寸为1x2的火炬式传感器]
>>>五
0.3961
[火炬.大小为1的漂浮张量]
>>>p
0.4678
0.0996
[火炬.大小为2的漂浮张量]
>>>torch.sparse.FloatTensor(i.t(),v,torch.Size(list(p.Size()))).to_densed()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
运行时错误:无效参数2:在/Users/soumith/code/builder/wheel/pytorch src/torch/lib/THS/generic/THSTensor.c:169处,维度数必须为nDimI+nDimV
两件事
1) 现在,p
是秩1的张量。要在位置[1,0]
中插入某个内容,它需要是秩2的张量
2) 你不需要用稀疏张量做复杂的事情。只要p[cd[0],cd[1]=v[0]
就可以了。其中cd=torch.LongTensor([row\u idx,col\u idx])
因此:
[火炬.尺寸为2x2的浮标张量]
[火炬.尺寸为2x2的浮标张量]
很简单。结果是问题在于
p.size()
给出了(2L,)
和len((2L,)
是1,就像你指出的那样,所以我只是添加了一个if块,以确保大小始终是两个,例如s=list(p.size())
然后if len(s)==1:s.append(1)
这样我就可以接受我期望从神经网络得到的任何形状的张量。
>>> 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
>>> p[cd[0], cd[1]] = v[0]
>>> p
0.9342 0.8539
0.3961 0.0823