在Pytorch上使用稀疏矩陣


在Pytorch上使用稀疏矩陣

最近在寫一個NLP的小項目,用到了Pytorch做神經網絡模型。但是眾所周知NLP的一個特點就是特征矩陣是稀疏矩陣,當時處理稀疏矩陣用的是scipy.sparse,現在要把它放到Pytorch中,還是費了一點周折的

首先,如何把python的二維數組(這里以trainData為例)轉換為稀疏矩陣呢?這一步很簡單,只需要

from scipy.sparse import coo_matrix,然后使用coo_matrix(trainData)就好了

其實 scipy.sparse下面有三種稀疏矩陣,這篇文章有一個大概的介紹:

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

to_csr 是按行壓縮的稀疏矩陣,按行切片比較快,可以按列切片

to_csc 是按列壓縮的稀疏矩陣,按列切片比較快,可以按行切片

這篇文章介紹了稀疏矩陣的COO和CSR存儲方式:https://blog.csdn.net/u012101561/article/details/90348288

這里我們使用coo_matrix就好,是因為我們等會要重新創建torch上的稀疏矩陣,這里只要參數就好了。

如何將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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM