pytorch数据读取之Dataset与DataLoader
1. 先前处理数据集的代码经常比较混乱并且难以维护
2. 数据集处理代码应该和训练代码解耦合,从而达到模块化和更好的可读性
因此,pytorch提出了两个数据处理类:DataLoader与Dataset
from torch.utils.data import Dataset, DataLoaderclass SimpleDataset(Dataset):def __init__(self, size):self.x = [i for i in range(size)]def __getitem__(self, index):return self.x[index]def __len__(self):return len(self.x)dataset = SimpleDataset(322)
# 将dataset对象传入DataLoader类
dataloader = DataLoader(dataset, batch_size=32, shuffle=True, drop_last=False)
# 此处不执行,生成器for idx, data in enumerate(dataloader):print(idx)print(len(data))
当处理自己的数据时,需要继承Dataset类,重写__init__, __len__, __getitem__函数。
__init__:读取数据集
__len__:获取整个数据集的样本个数
__getitem__:获取样本中的第index个样本
当你需要加载数据时,将dataset对象传入DataLoader类
batch_size:将数据集分成大小为batch_size的序列
shuffle:是否打乱数据。如果打乱,获取样本并不是按照顺序的,多次执行dataloader获取的数据内容也不一样的
drop_last:将数据集按照batch_size大小分批,如果有剩余,是否丢掉剩余的
上面每条样本只有一个数据,当一条样本对应于多个数据时,需要用到字典:
from torch.utils.data import Dataset, DataLoaderclass SimpleDataset(Dataset):def __init__(self, size):self.x = [i for i in range(size)]self.y = [i + 1 for i in range(size)]def __getitem__(self, index):sample = {"x": self.x[index], "y": self.y[index]}return sampledef __len__(self):return len(self.x)dataset = SimpleDataset(322)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True, drop_last=False)for idx, data in enumerate(dataloader):print(idx)print(len(data))
对于非向量化的数据同样可处理:
from torch.utils.data import Dataset, DataLoaderclass SimpleDataset(Dataset):def __init__(self, size):self.x = ["I love you" for i in range(size // 2)] + ["I love you very much" for i in range(size // 2, size)]self.y = [i + 1 for i in range(size)]def __getitem__(self, index):sample = {"x": self.x[index], "y": self.y[index]}return sampledef __len__(self):return len(self.x)dataset = SimpleDataset(322)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True, drop_last=False)for idx, data in enumerate(dataloader):print(idx)print(len(data))
读取文本后再向量化有一个好处,就是进行padding时,只需要考虑当前batch中最大长度,而不需要考虑整个数据集的最大长度。
并且如果数据集太大,无法在SimpleDataset的__init__函数中全部向量化,则可以只读原始数据,通过dataloader分批之后再向量化。
但是以下处理是错误的:
from torch.utils.data import Dataset, DataLoaderclass SimpleDataset(Dataset):def __init__(self, size):self.x = ["I love you".split() for i in range(size // 2)] + \["I love you very much".split() for i in range(size // 2, size)]# self.x 里面的元素为列表,自动解析成每个样本对应的多个元素;# 但是因为列表的长度不一致,后面列表中的very,much取不到,因为有的样本不包含这两个元素self.y = [i + 1 for i in range(size)]def __getitem__(self, index):sample = {"x": self.x[index], "y": self.y[index]}return sampledef __len__(self):return len(self.x)dataset = SimpleDataset(322)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True, drop_last=False)for idx, data in enumerate(dataloader):print(idx)print(len(data))
pytorch数据读取之Dataset与DataLoader相关推荐
- 编写transformers的自定义pytorch训练循环(Dataset和DataLoader解析和实例代码)
文章目录 一.Dataset和DataLoader加载数据集 1.torch.utils.data 2. 加载数据流程 3. Dataset 4. dataloader类及其参数 5. dataloa ...
- PyTorch框架学习八——PyTorch数据读取机制(简述)
PyTorch框架学习八--PyTorch数据读取机制(简述) 一.数据 二.DataLoader与Dataset 1.torch.utils.data.DataLoader 2.torch.util ...
- 使用 PyTorch 数据读取,JAX 框架来训练一个简单的神经网络
使用 PyTorch 数据读取,JAX 框架来训练一个简单的神经网络 本文例程部分主要参考官方文档. JAX简介 JAX 的前身是 Autograd ,也就是说 JAX 是 Autograd 升级版本 ...
- PyTorch系列 (二): pytorch数据读取自制数据集并
PyTorch系列 (二): pytorch数据读取 PyTorch 1: How to use data in pytorch Posted by WangW on February 1, 2019 ...
- Pytorch数据读取(Dataset, DataLoader, DataLoaderIter)
Pytorch的数据读取主要包含三个类: Dataset DataLoader DataLoaderIter 这三者是一个依次封装的关系: 1.被装进2., 2.被装进3. Dataset类 Pyto ...
- 速成pytorch学习——6天Dataset和DataLoader
Pytorch通常使用Dataset和DataLoader这两个工具类来构建数据管道. Dataset定义了数据集的内容,它相当于一个类似列表的数据结构,具有确定的长度,能够用索引获取数据集中的元素. ...
- 《Pytorch学习指南》- Dataset和Dataloader用法详解
目录 前言 DataSet DataLoader 数据构建 1. 创建Dataset 类 :sparkles: 2. 读取数据 :ambulance: 3. 返回数据 :zap: 读取数据 :art: ...
- 系统学习Pytorch笔记三:Pytorch数据读取机制(DataLoader)与图像预处理模块(transforms)
Pytorch官方英文文档:https://pytorch.org/docs/stable/torch.html? Pytorch中文文档:https://pytorch-cn.readthedocs ...
- Pytorch数据读取加速方法
1. 方法一:使用prefetcher class data_prefetcher():def __init__(self, loader):self.loader = iter(loader)sel ...
最新文章
- 设计模式——单例模式(Singleton)
- python编写用户输入的是q么代码_Python课 #01号作业
- 【Java】LeetCode 876 获取链表中间节点
- 估价范围还没有生产式的物料帐薄
- rhel 6下配置网络yum源(虚拟机环境下)
- Js+DVML:很酷实用的右键弹出菜单
- 关于低代码真实技术趋势,听低代码巨头 Mendix 怎么说
- VMware Workstation 11网络桥接可以通,NAT不能与主机通信解决办法
- [Linux] 头文件加载顺序
- SQL Server2014安装流程及注意事项
- 锂电池电量百分比计算_锂电池充放电理论及电量计算方法设计
- android购物车栏,Android怎么实现二级列表购物车功能
- 敏捷思维-架构设计中的方法学(11)精化和合并
- 安徽省计算机二级水平考试试卷,安徽省计算机二级考试理论试题(附答案)
- C# 将PDF文档转换成图片
- PS——规定尺寸的证件照的制作
- Java How to Program练习题_第六章_深入理解方法(Methods: A Deeper Look)
- 人活一辈子到底为了啥?(人生苦短 我要学人工智能)一万年太久,只争朝夕。
- 再见了,少年——转自有意思吧
- linux性能监控工具perf,Linux性能分析中常用的工具perf介绍
热门文章
- 汶川地震《生死不离》歌词
- 诸葛亮的十堂课:在变局中安身立命,在逆境中找到力量
- java mysql jdbc 封装_利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包括增删改查、JavaBean反射原理,附源代码)...
- mysql 什么时候用内连接_mysql显示内连接和隐式内连接的区别,什么时候非要用到显示内连接。...
- 差分隐私 机器学习_微软发布多个建置可信AI的问责机器学习工具
- 251f与ips屏显示器对比_8百左右预算,2020年PS平面设计/摄影后期显示器推荐/选购指南(全高清+高色域屏)...
- php 置多条cookie,php 在cookie存储多个的简单示例
- 酒店前台html,酒店前台常用英语单词
- 互联网行业不需要中年人,那些35岁离开BAT的人都去哪了?
- 面试被问:Selenium元素定位不到问题,如何回答?