pytorch构造可迭代的DataLoader,动态流式读取数据源,不担心内存炸裂(pytorch Data学习三)

2023-11-11

构造迭代读取的Dataloader,首先需要可迭代的DataSet,这一部分详细请参考:pytorch构造可迭代的Dataset——IterableDataset(pytorch Data学习二),下面直接开始封装到DataLoader

封装IterableDataset到DataLoader

比如文件test_csv.csv

1,2,3,4,1
1,2,3,4,2
1,2,3,4,3
1,2,3,4,4
1,2,3,4,5

1. 一般文本封装方法

由于DataLoader得到的迭代数据都是Tensor格式的数据,因此需要将文本转换为tensor格式,修改dataset的__iter__方法为:

import torch
from torch.utils.data import IterableDataset, DataLoader
import numpy as np


class MyIterableDataset(IterableDataset):
    def __init__(self, file_path):
        self.file_path = file_path

    def __iter__(self):
        with open(self.file_path, 'r') as file_obj:
            for line in file_obj:
                line_data = line.strip('\n').split(',')
                yield torch.from_numpy(np.array(line_data, dtype='int')) # 这里按照自己的代码看格式哈

然后封装即可:

if __name__ == '__main__':
    dataset = MyIterableDataset('test_csv.csv')
    dataloader = DataLoader(dataset, batch_size=3) # 这里batch_size=3,意味着每次读取dataloader都会循环三次dataset
    for data in dataloader:
        print(data)

完整代码:

import torch
from torch.utils.data import IterableDataset, DataLoader
import numpy as np


class MyIterableDataset(IterableDataset):
    def __init__(self, file_path):
        self.file_path = file_path

    def __iter__(self):
        with open(self.file_path, 'r') as file_obj:
            for line in file_obj:
                line_data = line.strip('\n').split(',')
                yield torch.from_numpy(np.array(line_data, dtype='int'))


if __name__ == '__main__':
    dataset = MyIterableDataset('test_csv.csv')
    dataloader = DataLoader(dataset, batch_size=3)
    for data in dataloader:
        print(data)

2. pandas read_xxx封装方法

思路同上,代码如下:

class PandasIterableDataset(IterableDataset):
    def __init__(self, file_path):
        import pandas as pd

        self.data_iter = pd.read_csv(file_path, iterator=True, header=None, chunksize=1)

    def __iter__(self):
        for data in self.data_iter:
            yield torch.from_numpy(np.array(data).flatten())


if __name__ == '__main__':
    dataset = PandasIterableDataset('test_csv.csv')
    dataloader = DataLoader(dataset, batch_size=3)
    for data in dataloader:
        print(data)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pytorch构造可迭代的DataLoader,动态流式读取数据源,不担心内存炸裂(pytorch Data学习三) 的相关文章

随机推荐

  • sql server 2008 r2各个版本的区别与选择

    windows server 2012 r2 standard安装sql server 2008 R2 https blog csdn net maoiur article details 78322175https blog csdn n
  • UniCode编码表

    Unicode编码则是采用双字节16位来进行编号 可编65536字符 基本上包含了世界上所有的语言字符 它也就成为了全世界一种通用的编码 而且用十六进制4位表示一个编码 非常简结直观 为大多数开发者所接受 特别是十六进制编码后 可以解决汉字
  • java泛型的简介说明

    转自 java泛型的简介说明 下文笔者讲述java泛型的简介说明 如下所示 在JDK5中 Java语言引入了泛型机制 但是这种泛型机制其实是通过类型擦除来实现 即Java中的泛型只在程序源代码中有效 源代码阶段提供类型检查 在编译后的字节码
  • CentOS7 下的配置FTP服务器增强版~(零基础学会FTP配置)

    ps 原文不知出处 但是原文也不能正常启动 这里做了一些修改 如果能正常配置请在下方留言让更多的人看到 因为之前我本人照着网上的教程安装卸载了十多次也无法正常使用 不希望后面的兄弟继续浪费时间 如果不能使用 也请劳烦贴出相应的错误 参考 h
  • go 环境变量存储在哪里?

    Q golang环境变量存储在哪里 A 保存在go env GOENV所示的文件里 C Users Administrator gt go env GOENV C Users Administrator AppData Roaming go
  • SQL Server 数据库的创建、删除、修改

    1 创建数据库CREATE 创建数据库语句的基本格式 CREATE DATABASE database name ON PRIAMRY
  • 使用Mulesoft建立webservice, simple方式,POJO

    Mulesoft是使用CXF来支持web service 有三种方式 1 JAX WS 2 Simple POJO 3 Proxy pass throught 本文介绍POJO 最简单的方式 1 首先创建接口跟实现类 接口可以不用 pack
  • ORACLE 分组函数COUNT使用

    COUNT 返回表中记录总数 适用于任意数据类型 两种使用方式 1 SELECT COUNT 1 FROM sh mp fksq where create id 50101311 运行效果 2 SELECT COUNT FROM sh mp
  • Python学习 -- 正则表达式(re模块)

    正则表达式是一种强大的模式匹配工具 用于在文本中查找和匹配特定模式的字符串 在Python中 我们可以使用re模块来操作和处理正则表达式 本篇技术博客将介绍正则表达式的基础语法和re模块的详细使用方法 并通过具体的代码案例来帮助初学者快速掌
  • sql server2005的死锁

    select request session id spid OBJECT NAME resource associated entity id tableName from sys dm tran locks where resource
  • 解决cannot resolve symbol “xxxx”的问题(亲测有效)

    今天做项目的时候导入了一个api接口 并且把附带的jar包也拷贝到了Maven项目中 但是有个方法一直报cannot resolve symbol xxxx 百思不得其解 在网上搜了各种各样的方法也没有解决 这个问题其实就是无法解析某方法
  • Java 实现简单邮件发送(带附件)

    目录 前言 一 添加pom依赖 二 完整发邮件代码 前言 最近写发邮件的功能时 需要把excel文件和邮件内容一起发送 简单记录 一 添加pom依赖
  • C# SuperSocket 手把手教你入门 傻瓜教程---3(Telnet服务器和客户端请求处理)

    C SuperSocket 手把手教你入门 傻瓜教程系列教程 C SuperSocket 手把手教你入门 傻瓜教程 1 服务器单向接收客户端发送数据 C SuperSocket 手把手教你入门 傻瓜教程 2 服务器和客户端双向通信 C Su
  • ICP算法(Iterative Closest Point迭代最近点算法)

    最近在做点云匹配 需要用c 实现ICP算法 下面是简单理解 期待高手指正 ICP算法能够使不同的坐标下的点云数据合并到同一个坐标系统中 首先是找到一个可用的变换 配准操作实际是要找到从坐标系1到坐标系2的一个刚性变换 ICP算法本质上是基于
  • JMeter快速入门知识系列(7)----JMeter断言之响应断言

    7 1 断言的定义 断言用于验证取样器请求或对应的响应数据是否返回了期望的结果 可以是看成验证测试是否预期的方法 对于接口测试与性能测试来说 就是测试Request Response 断言即可以针对Request进行 也可以针对Respon
  • C语言scanf()函数使用的注意事项

    scanf 函数相信就算刚学C语言的朋友也知道 这是一个标准输入函数 它是从标准输入流stdin中读内容的 它的第一个参数是格式化字符串 后面跟着的存储内容的地址列表 如果在全段代码中 只调用一次 且只获取一个变量内容的话 一般不会出现什么
  • POJ 275 Drainage Ditches|网络流|dinic模版

    问题描述 总时间限制 1000ms内存限制 65536kB 描述 Every time it rains on Farmer John s fields a pond forms over Bessie s favorite clover
  • Metis异常检测样本管理源码分析

    Metis异常检测样本管理源码分析 1 表说明 2 样本来源 2 1 样本导入 2 2 异常样本生成 2 3 异常样本打标 1 表说明 Metis一共三张表 anomaly sample dataset train task sample
  • C++STL常见面试题总结

    1 STL的介绍 STL 标准模板库 提高程序的 开发效率 和 复用性 STL包含的 6大组件 容器 迭代器 算法 仿函数 适配器 空间配置器 各组件的作用 容器 用于容纳一组相同类型的元素 迭代器 算法 仿函数 适配器 空间配置器 负责空
  • pytorch构造可迭代的DataLoader,动态流式读取数据源,不担心内存炸裂(pytorch Data学习三)

    构造迭代读取的Dataloader 首先需要可迭代的DataSet 这一部分详细请参考 pytorch构造可迭代的Dataset IterableDataset pytorch Data学习二 下面直接开始封装到DataLoader中 文章