对于比较大的数据集,比如好几个T的数据,没有办法一次性全部加载进内存,因此需要构建一个可迭代的数据集IterableDataset

迭代读取文本文件

要借助pytorch的IterableDataset模块,官方文档是:IterableDataset。

按照官网的说法,需要继承这个IterableDataset类,然后覆写__iter__这个方法,返回一个可迭代的对象即可。

因为我们要处理的时标准 Libsvm 格式数据,所以还需要实现又给process_line函数处理每一行数据。

class LibsvmDataset(IterableDataset):def __init__(self, file_path, n_features):"""file_path: Libsvm格式数据文件地址n_features: 特征数,从1开始"""self.file_path = file_pathself.n_features = n_featuresdef process_line(self, line):line = line.split(' ')label, values = int(line[0]), line[1:]value = torch.zeros((self.n_features))for item in values:idx, val = item.split(':')value[int(idx) - 1] = float(val)return label, valuedef __iter__(self):with open(self.file_path, 'r') as fp:for line in fp:yield self.process_line(line.strip("\n"))

然后我们就可以直接把LibsvmDataset通过DataLoader封装成一个加载器。

dataset = LibsvmDataset("./test.libsvm", 10)
dataloader = DataLoader(dataset, batch_size=3)
for data in dataloader:print(data)

Shuffle 操作

如果说想实现shuffle操作的话,可以手动增加一个缓冲池,然后随机抽取。

class LibsvmDataset(IterableDataset):def __init__(self, file_path, n_features, buffer_size=256):"""file_path: Libsvm格式数据文件地址n_features: 特征数,从1开始"""self.file_path = file_pathself.n_features = n_featuresself.buffer_size = buffer_sizedef process_line(self, line):line = line.split(' ')label, values = torch.tensor([int(line[0])], dtype=torch.float), line[1:]value = torch.zeros((self.n_features), dtype=torch.float)for item in values:idx, val = item.split(':')value[int(idx) - 1] = float(val)return value, labeldef __iter__(self):shuffle_buffer = []with open(self.file_path, 'r') as fp:index = 0for line in fp:shuffle_buffer.append(self.process_line(line.strip("\n")))index += 1if index > self.buffer_size:breakwith open(self.file_path, 'r') as fp:for line in fp:evict_idx = random.randint(0, self.buffer_size - 1)yield shuffle_buffer[evict_idx]shuffle_buffer[evict_idx] = self.process_line(line.strip("\n"))

PyTorch 加载超大 Libsvm 格式数据相关推荐

  1. R语言读取(加载)txt格式数据为dataframe、可视化绘制温度直方图、自定义设置坐标轴名称字体大小

    R语言读取(加载)txt格式数据为dataframe.可视化绘制温度直方图.自定义设置坐标轴名称字体大小 目录 R语言读取(加载)txt格式数据为dataframe.可视化绘制温度直方图.自定义设置坐 ...

  2. R语言读取(加载)txt格式数据为dataframe

    R语言读取(加载)txt格式数据为dataframe 目录 R语言读取(加载)txt格式数据为dataframe R语言是解决什么问题的? R语言读取(加载)txt格式数据为dataframe 安利一 ...

  3. 如何使用矢量图形数据导出可以在高德百度等互联网地图上加载的JSON格式数据

    本文以广东省行政区划为例介绍如何使用矢量图形数据导出可以在高德百度等互联网地图上加载的省级行政区划边界JSON数据. 第一步用GIS相关工具,如ArcGIS.MapGIS.QGIS等工具加载广东省域的 ...

  4. ArcGIS应用(二十二)Arcmap加载激光雷达las格式数据

    1.使用数据 使用Icesat-2星载激光雷达ATL03数据,数据格式为las格式. 2.使用工具 Argis工具箱中的LAS Dataset工具模块,位于Data Management Tools里 ...

  5. pytorch加载自己的图片数据集的两种方法

    目录 ImageFolder 加载数据集 使用pytorch提供的Dataset类创建自己的数据集. Dataset加载数据集 接下来我们就可以构建我们的网络架构: 训练我们的网络: 保存网络模型(这 ...

  6. pytorch加载训练数据集dataloader操作耗费时间太久,该如何解决?

    笔者在使用pytorch加载训练数据进行模型训练的时候,发现数据加载需要耗费太多时间,该如何缩短数据加载的时间消耗呢?经过查询相关文档,总结实际操作过程如下: 1.尽量将jpg等格式的文件保存为bmp ...

  7. Pytorch加载数据集的方式总结

    Pytorch加载数据集的方式总结 一.自己重写定义(Dataset.DataLoader) 二.用Pytorch自带的类(ImageFolder.datasets.DataLoader) 2.1 加 ...

  8. Knockout应用开发指南 第六章:加载或保存JSON数据

    原文:Knockout应用开发指南 第六章:加载或保存JSON数据 加载或保存JSON数据 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地 ...

  9. pytorch 驱动不兼容_解决Pytorch 加载训练好的模型 遇到的error问题

    这是一个非常愚蠢的错误 debug的时候要好好看error信息 提醒自己切记好好对待error!切记!切记! -----------------------分割线---------------- py ...

最新文章

  1. python用于什么-python主要应用在哪些领域?
  2. Java Review - HashMap HashSet 源码解读
  3. 网络:IP协议与寻址
  4. Mac os下android studio模拟器无法联网解决方法
  5. [react] 请描述下你对react的新特性Hooks的理解?它有哪些应用场景?
  6. 并发编程-concurrent指南-原子操作类-AtomicBoolean
  7. Diango博客--18.使用 Fabric 自动化部署 Django 项目
  8. 经典重温:《Attention Is All You Need》详解
  9. jdbc驱动类加载直接指定线程上下文加载器加载
  10. 【git系列】提交新的PR-撤销git rebase
  11. HDOJ 1564 Play a game【博弈论】
  12. 基于耗散性的matlab,基于耗散能的沥青抗老化性能评价方法与流程
  13. 运放专题:电压电流转换
  14. 优色专显教你led显示屏诺瓦刷屏教程
  15. myeclipse如何导入项目
  16. UMG笔记——关于UMG 的一些基础知识和动画的实现
  17. CVTE面试总结(全网面经,已收offer)
  18. 远程ARM设备Xavier方法——ZeroTier+nomachine
  19. Highcharts使用小心得
  20. 全面质量管理在软件业的应用

热门文章

  1. 20172319 2018.10.12《Java程序设计教程》第6周课堂实践(补写博客)
  2. oracle 11g ocp 笔记(22)--调度程序
  3. 关于水晶报表的一些错误
  4. Debian 升级到 PHP 7,并支持并行安装
  5. 饲料企业精细化生产管理方案
  6. sqlserver结果集转为字符串
  7. 对集合变量定义赋值_SpringBoot配置加载原理(自定义加载配置)
  8. Java黑皮书课后题第9章:9.7(Account类)设计一个名为Account的类,它包含……。编写一个测试程序,创建一个账户ID为1122、余额为20000美元、年利率为4.5%的Account…
  9. Java黑皮书课后题第3章:3.12(回文数字)编写一个程序,提示用户输入一个三位的整数,然后确定它是否是回文数
  10. PPS2013校园招聘笔试题