I need just basic sparse matrix multiplication in order to implement a Graph ConvNet model. For example:

  
      
      tkipf.github.io
  
  
    

How powerful are Graph Convolutional Networks? 130

Many important real-world datasets come in the form of graphs or networks: social networks, knowledge graphs, protein-interaction networks, the World Wide Web, etc. (just to name a few). Yet, until recently, very little attention has been devoted to...


  
  
    
    
  
  


and

  
      github.com
  
  
    mdeff/cnn_graph/blob/master/lib/models.py#L898 20

L = tf.SparseTensor(indices, L.data, L.shape)
L = tf.sparse_reorder(L)
# Transform to Chebyshev basis
x0 = tf.transpose(x, perm=[1, 2, 0])  # M x Fin x N
x0 = tf.reshape(x0, [M, Fin*N])  # M x Fin*N
x = tf.expand_dims(x0, 0)  # 1 x M x Fin*N
def concat(x, x_):
    x_ = tf.expand_dims(x_, 0)  # 1 x M x Fin*N
    return tf.concat([x, x_], axis=0)  # K x M x Fin*N
if K > 1:
    x1 = tf.sparse_tensor_dense_matmul(L, x0)
    x = concat(x, x1)
for k in range(2, K):
    x2 = 2 * tf.sparse_tensor_dense_matmul(L, x1) - x0  # M x Fin*N
    x = concat(x, x2)
    x0, x1 = x1, x2
x = tf.reshape(x, [K, M, Fin, N])  # K x M x Fin x N
x = tf.transpose(x, perm=[3,1,2,0])  # N x M x Fin x K
x = tf.reshape(x, [N*M, Fin*K])  # N*M x Fin*K
# Filter: Fin*Fout filters of order K, i.e. one filterbank per feature pair.
W = self._weight_variable([Fin*K, Fout], regularization=False)



  
  
    
    
  
  


The Laplacian matrix is extremely sparse is this case.