• 在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

  • 相关阅读:
    sourceinsight问题
    mysql函数调用过程
    visual studio 中sstrcpy报错的问题
    mysql基本操作
    c/c++程序连接mysql
    mysql 在visual studio中的配置
    va_start
    c do{}while(0)
    .NET 通用权限设计
    https://zhidao.baidu.com/question/362784520674844572.html
  • 原文地址:https://www.cnblogs.com/jiading/p/11979135.html
Copyright © 2020-2023  润新知