在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
在Pytorch上使用稀疏矩阵的更多相关文章
- [转载]PyTorch上的contiguous
[转载]PyTorch上的contiguous 来源:https://zhuanlan.zhihu.com/p/64551412 这篇文章写的非常好,我这里就不复制粘贴了,有兴趣的同学可以去看原文,我 ...
- 将TVM集成到PyTorch上
将TVM集成到PyTorch上 随着TVM不断展示出对深度学习执行效率的改进,很明显PyTorch将从直接利用编译器堆栈中受益.PyTorch的主要宗旨是提供无缝且强大的集成,而这不会妨碍用户.为此, ...
- matlab——sparse函数和full函数(稀疏矩阵和非稀疏矩阵转换)
函数功能:生成稀疏矩阵 使用方法 :S = sparse(A) 将矩阵A转化为稀疏矩阵形式,即矩阵A中任何0元素被去除,非零元素及其下标组成矩阵S.如果A本身是稀疏的,sparse(S)返回S. S ...
- Highway Networks Pytorch
导读 本文讨论了深层神经网络训练困难的原因以及如何使用Highway Networks去解决深层神经网络训练的困难,并且在pytorch上实现了Highway Networks. 一 .Highway ...
- 基于pytorch实现HighWay Networks之Highway Networks详解
(一)简述---承接上文---基于pytorch实现HighWay Networks之Train Deep Networks 上文已经介绍过Highway Netwotrks提出的目的就是解决深层神经 ...
- 【转载】 Caffe BN+Scale层和Pytorch BN层的对比
原文地址: https://blog.csdn.net/elysion122/article/details/79628587 ------------------------------------ ...
- pytorch使用tensorboardX进行网络可视化
我们知道,对于pytorch上的搭建动态图的代码的可读性非常高,实际上对于一些比较简单的网络,比如alexnet,vgg阅读起来就能够脑补它们的网络结构,但是对于比较复杂的网络,如unet,直接从代码 ...
- 库、教程、论文实现,这是一份超全的PyTorch资源列表(Github 2.2K星)
项目地址:https://github.com/bharathgs/Awesome-pytorch-list 列表结构: NLP 与语音处理 计算机视觉 概率/生成库 其他库 教程与示例 论文实现 P ...
- 【PyTorch深度学习】学习笔记之PyTorch与深度学习
第1章 PyTorch与深度学习 深度学习的应用 接近人类水平的图像分类 接近人类水平的语音识别 机器翻译 自动驾驶汽车 Siri.Google语音和Alexa在最近几年更加准确 日本农民的黄瓜智能分 ...
随机推荐
- word里快捷输入分割线
- 15 Flutter仿京东商城项目 搜索页面布局
Search.dart import 'package:flutter/material.dart'; import 'package:flutter_jdshop/services/ScreenAd ...
- List的remove方法里的坑
今天遇到一件怪事,用一个ArrayList添加了一个对象,再调用ArrayList的remove方法删除该对象,当然这时对象是数据库里查出来的,但内容绝对是一样,却发现remove失败了.演示一下,这 ...
- c# 线程异步处理
public class AsyncHelper { private static readonly TaskFactory _myTaskFactory = new TaskFactory(Canc ...
- 查看进程的命令ps
查看进程的命令:ps aux strace -p pid(进程id) 杀死进程:kill pid(进程id)强制杀死进程:kill -9 pid(进程id) linux ps 命令查看进程状态linu ...
- MySQL创建用户、授权、删除
1.在MySQL中创建新用户 使用具有shell访问权限的root用户登录MySQL服务器并创建名为“rahul”的新用户.下面的命令只允许从localhost系统访问用户rahul的MySQL服务器 ...
- 工具 --- Git使用
创建远程仓库 Github 首相在GitHub网站创建一个仓库:右上角加号➕,选择new repository 然后创建编辑仓库:名称.说明.是否公开.语言.分支风格等信息.然后创建. 复制仓库地址 ...
- ORACLE-JDK非收费版本下载链接
这个链接下可以下载oracleJDK的所有版本 https://www.oracle.com/technetwork/java/javase/archive-139210.html 其中jdk192之 ...
- Goahead 编译
目录 Goahead 目录说明 Ubuntu编译 交叉编译 方便测试 参考 title: Goahead date: 2019/11/6 09:45:01 toc: true --- Goahead ...
- 43.QQ聊天软件GUI窗口编写
QQ聊天软件代码功能编写 一,Tkinter聊天界面编写 1,聊天软件客户端界面开发-1 Tkinter的模块(“TK接口”)是标准的Python接口从Tk的GUI工具包 https://i.cnbl ...