Dataset、IterableDataset 读取大数据的思路
一、单进程读取数据
Dataset
在数据量很大,无法将全部数据加载到内存的情况下,可以在init中读出表数据行数,在__len__设置为长度返回,在__getitem__中根据idx读表,idx就可以表示读取的表的行数,一般在读表的时候写作 path/table_name?start={}&end={}
import torch
import numpy as np
from torch.utils.data import IterableDataset, Dataset'''
需要先一次性把data都从文件或者表中读出来,知道数据的长度,为了生成index列表,长度为数据的长度
分batch训练的时候,dataloader根据分好的一个batch中的idx来读取这个batch中的数据
'''a = [{'anchor_text': np.array([1, 1, 1]), 'anchor_vis': np.array([1, 1, 1])},{'anchor_text': np.array([2, 2, 1]), 'anchor_vis': np.array([4, 1, 1])},{'anchor_text': np.array([3, 3, 1]), 'anchor_vis': np.array([2, 1, 1])},{'anchor_text': np.array([4, 4, 1]), 'anchor_vis': np.array([3, 1, 1])}]class TableDataset(Dataset):def __init__(self):self.tablepath = ''self.data_length = len(a)def __len__(self):return self.data_lengthdef __getitem__(self, idx):return a[idx]train_dataset = TableDataset()
train_ld = torch.utils.data.DataLoader(train_dataset, batch_size=2, shuffle=False)for idx, batch_data in enumerate(train_ld):print(batch_data)at = batch_data['anchor_text'].to(torch.float32)# print("at--------",at)
IterableDataset
在数据量很大,无法将全部数据加载到内存的情况下,可以在__iter__中一行一行的读表,读一行就立马返回一行。
import torch
import numpy as np
from torch.utils.data import IterableDataset, Dataset
'''
不需要一次性知道数据长度
分batch训练的时候,dataloader根据一个batch的大小bs来执行__iter__函数bs次,得到这个batch的数据
'''a = [{'anchor_text': np.array([1, 1, 1]), 'anchor_vis': np.array([1, 1, 1])},{'anchor_text': np.array([2, 2, 1]), 'anchor_vis': np.array([4, 1, 1])},{'anchor_text': np.array([3, 3, 1]), 'anchor_vis': np.array([2, 1, 1])},{'anchor_text': np.array([4, 4, 1]), 'anchor_vis': np.array([3, 1, 1])}]class TableDataset2(IterableDataset):def __init__(self):self.tablepath = ''def __iter__(self):for line in a:print("line:",line)yield linetrain_dataset = TableDataset2()
train_ld = torch.utils.data.DataLoader(train_dataset, batch_size=2, shuffle=False)for idx, batch_data in enumerate(train_ld):print(batch_data)at = batch_data['anchor_text'].to(torch.float32)# print("at--------",at)
上述提到的处理数据量大的方法,都需要提前将数据处理好存入表中
,程序读取数据就可以直接跑模型了。
二、多进程读取数据
后续有时间再补上
IterableDataset
当DataLoader设置为多进程时,每个进程都会拥有一个IterableDataset的生成器函数__iter__
,每当这个进程收集到的数据达到batch size的时候,就把这批收集到的数据给loader,也就在for batch_data in train_loader: 的时候就能得到这批数据。
Dataset、IterableDataset 读取大数据的思路相关推荐
- PyTorch 读取大数据
PyTorch 读取大数据 数据量太大,必须分批从磁盘加载,下面是单机单卡的思路: from torch.utils.data import Dataset, DataLoader import to ...
- 一本真正讲“大数据”处理思路的书
这是我读到的第一本真正讲"大数据"处理思路的书,我想分享一下我读了这本书的感悟. 一般情况下,在面对海量数据的时候,我们的软件架构也会跟着发生变化.当你的数据量在内存里放不下的时候 ...
- SAP ABAP 探索 CL_FDT_XL_SPREADSHEET 读取大数据量 Excel 的可能性
SAP ABAP 探索 CL_FDT_XL_SPREADSHEET 读取大数据量 Excel 的可能性 引言: 今时不同往日了,特别是在电商和零售行业中,动不动一个导入的 Excel 就有几十万行几十 ...
- python读取大数据量xml_[C#]_[使用微软OpenXmlSDK (OpenXmlReader)读取xlsx表格] 读取大数据量100万条数据Excel文件解决方案...
1.OpenXmlSDK是个很好的类库,可惜只能通过C#调用,C#的童鞋又福气了. 2.服务端程序由于没法安装office,所以这个对asp.net网站来说是最理想的库了.需要.net 4.0版本以上 ...
- python读取大数据量xml_多快好省地使用pandas分析大型数据集
1 简介 pandas虽然是个非常流行的数据分析利器,但很多朋友在使用pandas处理较大规模的数据集的时候经常会反映pandas运算"慢",且内存开销"大". ...
- Poi读取大数据量Excel文件
前言 最近生产环境有个老项目一直内存报警,不时的还出现内存泄漏,导致需要重启服务器,已经严重影响正常服务了. 分析 1.dump内存文件 liunx使用如下命令: ? 1 ./jmap -dump:f ...
- python大数据读取分析_python如何读取大数据
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- 构建煤矿物联网大数据平台思路(2)-实时数据库与时序数据库
传统工业实时历史数据库与时序数据库的区别? 本文介绍了实时数据库和时序数据库,并就其特点.应用场景.相关厂商.联系与区别做介绍. 实时历史数据库 ![实时历史数据库架构.png](https://im ...
- 【第01篇】利用POI框架的SAX方式之读取大数据2007版Excel(xlsx)【第1版】
1.开发环境:jdk7,poi3.13 如图: 红色标注的jar包需要自己去下,这个是利用SAX机理处理xml的接口,而POI实现了它(我记得是这样,仅供参考) 2. 背景需求: 前台上传一个xlsx ...
最新文章
- 关于服务器启动慢的问题
- Anaconda入门使用指南(二)
- 宽度定死、按照行间距、字体算出label高度
- 浅析网站优化知识自学从哪些方面开始起步
- 【每周CV论文推荐】 初学活体检测与伪造人脸检测必读的文章
- (转)AS3 Socket
- 东北师范大学计算机学院的导师,东北师范大学计算机科学与信息技术学院研究生导师简介-王佳男...
- 移动应用开发——作业3
- 线段覆盖(洛谷P1803题题解,C++语言描述)
- python对seo有什么用_现在做seo会运用到python吗
- nginx防火墙在哪设置_Nginx 基本使用介绍
- RecyclerView混合布局
- MACD神器 通达信指标公式 副图 源码 无加密 无未来
- 读书笔记|《金字塔原理》第二章
- Linux安装maven(超详细教程)
- 右浮动的顺序是反过来的,html中第一个是最后显示,而最后一个会在第一个显示。
- PowerDesigner关联表结构表示一对一或一对多
- 教你使用Python实现新个税计算器!
- Bzoj 2563: 阿狸和桃子的游戏 题解
- 随机密码生成(Python编程)