I’m trying to make a simple feed forward network with sparse weights. Using pytorch v0.1.12, python 3 [cuda80] I am unable to do a simple forward pass in the two ways shown below, both produce the same error.
The shape of x is [10,100] and the sparse tensor w1 is of shape [100,500].
I expect a dense tensor of shape [10,500].
x = Variable(torch.from_numpy(p_in).type(dtype), requires_grad=False)

#where weights[0] is of type torch.sparse.FloatTensor
w1 = Variable(weights[0].type(dtype_sparse), requires_grad=True)

#this is where the error occurs
l3 = torch.mm(x, w1)
#also used this:
l3 = x.mm(w1)

The output of this is:

TypeError                                 Traceback (most recent call last)
 in ()
----> 8     l3 = torch.mm(x, w1)


/home/lina/anaconda2/envs/py3/lib/python3.5/site-packages/torch/autograd/variable.py in mm(self, matrix)
525     def mm(self, matrix):
526         output = Variable(self.data.new(self.data.size(0), matrix.data.size(1)))
–> 527         return self._static_blas(Addmm, (output, 0, 1, self, matrix), False)
528
529     def bmm(self, batch):


/home/lina/anaconda2/envs/py3/lib/python3.5/site-packages/torch/autograd/variable.py in _static_blas(cls, args, inplace)
518         if num_args == 4:
519             alpha = args[1]
–> 520         return cls(alpha, beta, inplace)(*(args[:1] + args[-2:]))
521
522     def _blas(self, cls, args, inplace):


/home/lina/anaconda2/envs/py3/lib/python3.5/site-packages/torch/autograd/_functions/blas.py in forward(self, add_matrix, matrix1, matrix2)
26         output = self._get_output(add_matrix)
27         return torch.addmm(self.alpha, add_matrix, self.beta,
—> 28                            matrix1, matrix2, out=output)
29
30     def backward(self, grad_output):


TypeError: torch.addmm received an invalid combination of arguments - got (int, torch.FloatTensor, int, torch.FloatTensor, torch.sparse.FloatTensor, out=torch.FloatTensor), but expected one of:

(torch.FloatTensor source, torch.FloatTensor mat1, torch.FloatTensor mat2, *, torch.FloatTensor out)
(torch.FloatTensor source, torch.SparseFloatTensor mat1, torch.FloatTensor mat2, *, torch.FloatTensor out)
(float beta, torch.FloatTensor source, torch.FloatTensor mat1, torch.FloatTensor mat2, *, torch.FloatTensor out)
(torch.FloatTensor source, float alpha, torch.FloatTensor mat1, torch.FloatTensor mat2, *, torch.FloatTensor out)
(float beta, torch.FloatTensor source, torch.SparseFloatTensor mat1, torch.FloatTensor mat2, *, torch.FloatTensor out)
(torch.FloatTensor source, float alpha, torch.SparseFloatTensor mat1, torch.FloatTensor mat2, *, torch.FloatTensor out)
(float beta, torch.FloatTensor source, float alpha, torch.FloatTensor mat1, torch.FloatTensor mat2, *, torch.FloatTensor out)
didn’t match because some of the arguments have invalid types: (int, torch.FloatTensor, int, torch.FloatTensor, torch.sparse.FloatTensor, out=torch.FloatTensor)
(float beta, torch.FloatTensor source, float alpha, torch.SparseFloatTensor mat1, torch.FloatTensor mat2, *, torch.FloatTensor out)
didn’t match because some of the arguments have invalid types: (int, torch.FloatTensor, int, torch.FloatTensor, torch.sparse.FloatTensor, out=torch.FloatTensor)