在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在最近几年更加准确 日本农民的黄瓜智能分 ...
随机推荐
- Bootstarp学习
Bootstarp中文网 http://www.bootcss.com/ https://v2.bootcss.com/javascript.html
- 快速根据注释生成接口文档网页工具——Apidoc的使用教程
1,安装Node.js的npm工具环境: 如有不懂,请看我的博客:“https://blog.csdn.net/sinat_28371057/article/details/81612661“ 2,n ...
- JAVA 基础编程练习题36 【程序 36 移动位置】
36 [程序 36 移动位置] 题目:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数 package cskaoyan; public class cskao ...
- 【leetcode】520. Detect Capital
problem 520. Detect Capital 题意: 题目中给出的三种情况,分别是全是大写.全是小写.首字母大写,这三种情况返回True;否则返回False; solution: class ...
- 容器时代的持续交付工具---Drone:Drone使用
上一篇文章里已经介绍了如何安装Drone,下面我们来看下如何使用.还是基于gogs作为git仓储. 首先打开server对应的地址,进入登录页面,输入在启动server时配置的管理员账号(对应的就是g ...
- 日常小节----unity小坑记(射线检测固定层级)
unity中射线检测需设定所需层级时,必须加上距离!!! //一条从主相机到屏幕点击点的射线 Ray ray = Camera.Main.ScreenPointToRay(Input.mousePos ...
- useJDBC4ColumnNameAndLabelSemantics设置后无效,怎么办?
连接的是DB2数据库, 在查询语句中有SELECT COLUMNNAME AS ALIASNAME FROM TABLE这样的结构时, 会报如下错误: Caused by: com.ibm.db2.j ...
- 【AMAD】django-taggit -- 一个简单的,通用的django tagging模块
简介 个人评分 简介 django-taggit1是一个通用的,易用的标签系统. from django.db import models from taggit.managers import Ta ...
- ffmpeg学习笔记-Linux下编译Android动态库
Android平台要使用ffmpeg就需要编译生成动态库,这里采用Ubuntu编译Android动态库 文件准备 要编译生成Android需要以下文件 NDK ffmpeg源代码 NDK下载 NDK可 ...
- VSCode插件Prettier配置
参考链接:https://blog.csdn.net/wengou3033/article/details/88749448 Prettier格式化配置