在Pytorch上使用稀疏矩阵

在Pytorch上使用稀疏矩阵

最近在写一个NLP的小项目,用到了Pytorch作神经网络模型。可是众所周知NLP的一个特色就是特征矩阵是稀疏矩阵,当时处理稀疏矩阵用的是scipy.sparse,如今要把它放到Pytorch中,仍是费了一点周折的python

首先,如何把python的二维数组(这里以trainData为例)转换为稀疏矩阵呢?这一步很简单,只须要数组

from scipy.sparse import coo_matrix,而后使用coo_matrix(trainData)就行了服务器

其实 scipy.sparse下面有三种稀疏矩阵,这篇文章有一个大概的介绍:网络

scipy.sparse.coo_matrix是三元组,不能按行也不能按列切片函数

to_csr 是按行压缩的稀疏矩阵,按行切片比较快,能够按列切片spa

to_csc 是按列压缩的稀疏矩阵,按列切片比较快,能够按行切片.net

这篇文章介绍了稀疏矩阵的COO和CSR存储方式:http://www.javashuo.com/article/p-tgqruofq-mx.htmlcode

这里咱们使用coo_matrix就好,是由于咱们等会要从新建立torch上的稀疏矩阵,这里只要参数就行了。blog

如何将scipy上的稀疏矩阵转换为torch上的:教程

values =X_train.data
indices = np.vstack((X_train.row, X_train.col))
i = torch.LongTensor(indices)
v = torch.FloatTensor(values)
shape = X_train.shape
X_train=torch.sparse.FloatTensor(i, v, torch.Size(shape))

上面这部分能够写成个函数

要恢复为完整的二维tensor,直接调用X_train的to_dense()方法就行了,返回值就是普通的tensor

可是,遇到了新的问题,Torch上的稀疏矩阵怎么做为神经网络模型的输入呢?我在网上查了半天也没看到,只有一个keras的教程:https://www.jianshu.com/p/a7dadd842f78。我的以为在torch上应该也是有办法的,遇到了这个问题的同窗能够在Github上查找一些torch作NLP的项目,由于我不是作这个方向的,因此没有深究。

什么,你问我是怎么解决的?我把项目放到内存比我的电脑大得多的服务器上运行了2333

相关文章
相关标签/搜索