在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

在Pytorch上使用稀疏矩阵的更多相关文章

  1. [转载]PyTorch上的contiguous

    [转载]PyTorch上的contiguous 来源:https://zhuanlan.zhihu.com/p/64551412 这篇文章写的非常好,我这里就不复制粘贴了,有兴趣的同学可以去看原文,我 ...

  2. 将TVM集成到PyTorch上

    将TVM集成到PyTorch上 随着TVM不断展示出对深度学习执行效率的改进,很明显PyTorch将从直接利用编译器堆栈中受益.PyTorch的主要宗旨是提供无缝且强大的集成,而这不会妨碍用户.为此, ...

  3. matlab——sparse函数和full函数(稀疏矩阵和非稀疏矩阵转换)

    函数功能:生成稀疏矩阵 使用方法 :S = sparse(A) 将矩阵A转化为稀疏矩阵形式,即矩阵A中任何0元素被去除,非零元素及其下标组成矩阵S.如果A本身是稀疏的,sparse(S)返回S. S ...

  4. Highway Networks Pytorch

    导读 本文讨论了深层神经网络训练困难的原因以及如何使用Highway Networks去解决深层神经网络训练的困难,并且在pytorch上实现了Highway Networks. 一 .Highway ...

  5. 基于pytorch实现HighWay Networks之Highway Networks详解

    (一)简述---承接上文---基于pytorch实现HighWay Networks之Train Deep Networks 上文已经介绍过Highway Netwotrks提出的目的就是解决深层神经 ...

  6. 【转载】 Caffe BN+Scale层和Pytorch BN层的对比

    原文地址: https://blog.csdn.net/elysion122/article/details/79628587 ------------------------------------ ...

  7. pytorch使用tensorboardX进行网络可视化

    我们知道,对于pytorch上的搭建动态图的代码的可读性非常高,实际上对于一些比较简单的网络,比如alexnet,vgg阅读起来就能够脑补它们的网络结构,但是对于比较复杂的网络,如unet,直接从代码 ...

  8. 库、教程、论文实现,这是一份超全的PyTorch资源列表(Github 2.2K星)

    项目地址:https://github.com/bharathgs/Awesome-pytorch-list 列表结构: NLP 与语音处理 计算机视觉 概率/生成库 其他库 教程与示例 论文实现 P ...

  9. 【PyTorch深度学习】学习笔记之PyTorch与深度学习

    第1章 PyTorch与深度学习 深度学习的应用 接近人类水平的图像分类 接近人类水平的语音识别 机器翻译 自动驾驶汽车 Siri.Google语音和Alexa在最近几年更加准确 日本农民的黄瓜智能分 ...

随机推荐

  1. C之内存地址

    计算机的内存地址 * 32位系统最多能识别4G内存 * 32位系统的地址总线长度是32位的,也就是说能分配给内存地址的数字是 2的32次方个 * 内存中每一个字节都需要一个内存地址 * 一个数字对用一 ...

  2. 安装mysql问题解决

    [root@apollo init.d]# /etc/init.d/mysqld startmy_print_defaults: Can't read dir of '/etc/my.cnf.' (E ...

  3. Access restriction: The type JPEGImageEncoder is not accessible due to restriction

    转: 解决办法:Access restriction: The type JPEGImageEncoder is not accessible due to restriction 2011年11月2 ...

  4. [Scikit-learn] 2.3 Clustering - Spectral clustering

    From: 2.3.5 Clustering - Spectral clustering From: 漫谈 Clustering (4): Spectral Clustering From: 漫谈 C ...

  5. kubernetes监控(12)

    一.Weave Scope 1. weave scope 容器地图 创建 Kubernetes 集群并部署容器化应用只是第一步.一旦集群运行起来,我们需要确保一起正常,所有必要组件就位并各司其职,有足 ...

  6. 查看oracle数据库的链接数和用户

    http://www.cnblogs.com/is1988/archive/2012/11/21/2780067.html 1.查询oracle的连接数select count(*) from v$s ...

  7. ES6重要点学习

    1.解析赋值: let [a,b,c,d,e] = '我是中国人' //我 a = wo let [a,b,c] = 123 // 出错,Numberbu不允许解析不允许解析 2.数据集合Set, m ...

  8. PyToune:一款类Keras的PyTorch框架

    PyToune is a Keras-like framework for PyTorch and handles much of the boilerplating code needed to t ...

  9. Python扫描器-爬虫基础

    0x1.基础框架原理 1.1.爬虫基础 爬虫程序主要原理就是模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中 1.1.基础原理 1.发起HTTP请求 2 ...

  10. 通过命令行方式连接redis

    1.首先安装redis客户端 yum install redis 2.连接 redis-cli -h host -p port -a password host:远程redis服务器host port ...