Pytorch数据读取(Dataset, DataLoader, DataLoaderIter)

Pytorch的数据读取主要包含三个类:

  1. Dataset
  2. DataLoader
  3. DataLoaderIter

这三者是一个依次封装的关系: 1.被装进2., 2.被装进3.

Dataset类

Pytorch 读取数据,主要通过Dataset类,Dataset类是所有dataset类的基类,自定义的dataset类要继承它,并且实现它的两个最重要的方法 __getitem__()__len__()

具体的使用

from torch.utils.data import Datasetclass MyDataset(Dataset):def __init__(self, path):  # 可以写一些文件的读取self.trainUserList = self.load_train_rating_as_list(path + ".train.rating")def __getitem__(self, index):  # 根据index返回一条数据user= self.trainUserList[index]return userdef __len__(self):  # 样本数据的长度return len(self.trainUserList)

注意:dataset中应尽量只包含只读对象,避免修改任何可变对象。因为如果使用多进程,可变对象要加锁,但后面讲到的dataloader的设计使其难以加锁。

DataLoader类

Dataset 负责数据集,每次可以用 __getitem__() 返回一个样本,而 DataLoader 提供了对数据的批量处理。
Dataloader 的构造函数

class torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, sampler=None,batch_sampler=None, num_workers=0, collate_fn=<function default_collate>, pin_memory=False, drop_last=False, timeout=0, worker_init_fn=None)

参数解释

  • num_workers:使用的子进程数,0为不使用多进程。

  • worker_init_fn: 默认为None,如果不是None,这个函数将被每个子进程以子进程id([0, num_workers - 1]之间的数)调用

  • sample:采样策略,若这个参数有定义,则shuffle必须为False

  • pin_memory:是否将tensor数据复制到CUDA pinned memory中,pin memory中的数据转到GPU中会快一些

  • drop_last:当dataset中的数据数量不能整除batch size时,是否把最后不够batch size数据丢掉

  • collate_fn:把一组samples打包成一个mini-batch的函数。可以自定义这个函数以处理损坏数据的情况(先在__getitem__函数中将这样的数据返回None,然后再在collate_fn中处理,如丢掉损坏数据or再从数据集里随机挑一张),但最好还是确保dataset里所有数据都能用。

具体的使用

dataset = MyDataset('EPINION2/epinion2')  # 初始化自定义类
dataloader = DataLoader(dataset, batch_size=256, shuffle=True, num_workers=20)  # 使用DataLoader对自定义类进行包装,使其能够批量获取数据for epoch in range(20):for data in dataloader:  # data 是获取到的 batch_size 个 user# training...

DataLoaderIter

Dataset、Dataloader 和 DataLoaderIter 是层层封装的关系,最终在内部使用 DataLoaderIter 进行迭代。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

消息中间件系列(五):MQ消息队列的12点核心原理总结

消息队列已经逐渐成为分布式应用场景、内部通信、以及秒杀等高并发业务场景的核心手段&#xff0c;它具有低耦合、可靠投递、广播、流量控制、最终一致性 等一系列功能。 无论是 RabbitMQ、RocketMQ、ActiveMQ、Kafka还是其它等&#xff0c;都有的一些基本原理、术语、机制等&…

征稿 | 2019年全国知识图谱与语义计算大会(CCKS2019)投稿时间延长

全国知识图谱与语义计算大会&#xff08;CCKS: China Conference on Knowledge Graph and Semantic Computing&#xff09;由中国中文信息学会语言与知识计算专业委员会组织和承办。全国知识图谱与语义计算大会是两个全国性会议的合并&#xff1a;中文知识图谱研讨会the Chines…

LeetCode 641. 设计循环双端队列

文章目录1. 题目信息2. 解题1. 题目信息 设计实现双端队列。 你的实现需要支持以下操作&#xff1a; MyCircularDeque(k)&#xff1a;构造函数,双端队列的大小为k。 insertFront()&#xff1a;将一个元素添加到双端队列头部。 如果操作成功返回 true。 insertLast()&#xff…

代码逆流成河,深入C++如何又快又有效?

虽然编程语言有很多&#xff0c;但在需要顶级性能的项目上&#xff0c;基本都会使用C。尤其是机器人、自动驾驶、AI等嵌入和实时系统&#xff0c;都是C的主要应用方向&#xff0c;在这种层面&#xff0c;几乎没有竞争者。比如熊厂的搜索引擎、推荐引擎等核心产品&#xff0c;鹅…

用flask部署模型

模型部署&#xff1a;用flask部署模型 1.https://zhuanlan.zhihu.com/p/35879835 2.https://blog.keras.io/building-a-simple-keras-deep-learning-rest-api.html

CUDA out of memory. Tried to allocate 14763.13 GiB (GPU 3; 10.73 GiB total capacity; 165.28 MiB alre

RuntimeError: CUDA out of memory. Tried to allocate 14763.13 GiB (GPU 3; 10.73 GiB total capacity; 165.28 MiB already allocated; 9.61 GiB free; 10.72 MiB cached) 原因&#xff1a;要将大量数据加载到GPU上时出现的错误&#xff0c;数据量太大了 解决办法&#xff…

论文浅尝 | 混合注意力原型网络的含噪音少样本的关系分类

论文笔记整理&#xff1a;余海阳&#xff0c;浙江大学硕士&#xff0c;研究方向为知识图谱、自然语言信息抽取。链接&#xff1a;https://www.aaai.org/Papers/AAAI/2019/AAAI-GaoTianyu.915.pdf动机现有的关系分类方法主要依赖于远程监控&#xff08;DS&#xff09;&#xff0…

消息中间件系列(七):如何从0到1设计一个消息队列中间件

消息队列作为系统解耦&#xff0c;流量控制的利器&#xff0c;成为分布式系统核心组件之一。 如果你对消息队列背后的实现原理关注不多&#xff0c;其实了解消息队列背后的实现非常重要。 不仅知其然还要知其所以然&#xff0c;这才是一个优秀的工程师需要具备的特征。 今天…

LeetCode 239. 滑动窗口最大值(双端队列+单调栈)

文章目录1. 题目信息2. 解题2.1 暴力法2.2 双端队列法1. 题目信息 给定一个数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 示例:输入: n…

Airbnb搜索:重排序阶段如何优化搜索结果多样性?

文 | 谷育龙Eric编 | QvQ我是谷育龙Eric&#xff0c;研究方向有深度学习、搜索推荐&#xff0c;喜欢为大家分享深度学习在搜索推荐广告排序应用的文章。本文将基于Airbnb KDD 2020年的论文&#xff0c;介绍Airbnb搜索排序中在重排序阶段如何解决多样性的问题&#xff0c;对工业…

肖仰华 | 做个“有知识”的机器人

本文转载自公众号:知识工场。肖仰华博士&#xff0c;复旦大学计算机科学与技术学院教授&#xff0c;博士生导师&#xff0c;知识工场实验室负责人。本文是肖仰华教授应《中国计算机学会通信》邀请所撰写的特邀文章&#xff0c;全文见 CCCF 2019 年第 5 期。摘要&#xff1a;时下…

【NLP-NER】命名实体识别

NLP-NER】命名实体识别&#xff1a;https://zhuanlan.zhihu.com/p/88544122

pytorch基础一:张量

简单记录以便查阅 张量 一、创建张量 x torch.empty(5,3) # 创建未初始化矩阵张量 x torch.rand(5,3) # 创建初始化随机矩阵张量 x torch.zeros(5,3,dtypetorch.long) # 创建0填充矩阵张量 x torch.tensor([5.5,3]) …

消息中间件系列(九):详解RocketMQ的架构设计、关键特性、与应用场景

内容大纲&#xff1a; RocketMQ的简介与演进 RocketMQ的架构设计 RocketMQ的关键特性 RocketMQ的应用场景 RocketMQ的简介 RocketMQ一个纯java、分布式、队列模型的开源消息中间件&#xff0c;前身是MetaQ&#xff0c;是阿里研发的一个队列模型的消息中间件&#xff0c;后开…

LeetCode 151. 翻转字符串里的单词(栈)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个字符串&#xff0c;逐个翻转字符串中的每个单词。 示例 1&#xff1a;输入: "the sky is blue" 输出: "blue is sky the" 示例 2&#xff1a;输入: " hello world! " 输出: "world! hel…

推荐系统架构与算法流程详解

文 | yijiapan腾讯 WXG 数据分析师推荐算法的理解如果说互联网的目标就是连接一切&#xff0c;那么推荐系统的作用就是建立更加有效率的连接&#xff0c;推荐系统可以更有效率的连接用户与内容和服务&#xff0c;节约了大量的时间和成本。如果把推荐系统简单拆开来看&#xff0…

Python 文件操作中的读写模式:open(path, ‘-模式-‘,encoding=‘UTF-8‘)+python读写文件txt +文本数据预处理

python读写txt文件 文件的打开的两种方式f open("data.txt","r") #设置文件对象 f.close() #关闭文件#为了方便&#xff0c;避免忘记close掉这个文件对象&#xff0c;可以用下面这种方式替代 with open(data.txt,"r") as f: #设置文件对象…

Pytorch 中 matmul 广播

Pytorch 中 matmul 广播方式 一、两个 1 维&#xff0c;向量内积 a torch.ones(3) b torch.ones(3) print(torch.matmul(a,b)) # tensor(3.) 二、两个 2 维&#xff0c;矩阵相乘 a torch.ones(3,4) b torch.ones(4,3) print(torch.matmul(a,b)) # tensor([[4., 4., 4…

论文浅尝 | 将字面含义嵌入知识图谱表示学习

论文笔记整理&#xff1a;吴桐桐&#xff0c;东南大学博士生&#xff0c;研究方向为知识图谱&#xff0c;自然语言处理。链接&#xff1a;https://arxiv.org/pdf/1802.00934.pdf本文主要关注知识图谱中的链接预测问题&#xff0c;在既有的知识图谱表示学习模型的基础上提出了一…

优知学院创始人陈睿:怎样做好一个创业公司CTO?

CTO 是企业内技术最高负责人&#xff0c;对企业的发展起到至关重要的作用。但随着公司的不断发展&#xff0c;CTO 的工作重心也会不断变化。只有在正确的阶段做正确的事&#xff0c;才能更好地为公司做出贡献。 本文作者&#xff1a;陈睿 优知学院创始人&#xff0c;10年产品技…