当前位置: 首页 > article >正文

(done) 解释 python3 torch.utils.data DataLoader

特别注意:DataLoader 返回的迭代器是无尽的,依据如下 (CHATGPT3.5)

在这里插入图片描述

DataLoader 返回的迭代器默认情况下是无尽的,因为它会无限地循环遍历数据集,以提供批量的数据。

在训练神经网络时,通常会使用无尽的迭代器来循环遍历数据集,直到达到指定的训练 epoch 数量或其他停止条件。

如果你想要控制迭代器的结束,可以通过设置 DataLoader 的参数 num_epochs 或者在你的训练循环中设置停止条件来实现。

例如,在 PyTorch 中,你可以使用 torch.utils.data.DataLoader 的参数 num_epochs 来指定遍历数据集的次数。

torch.utils.data.DataLoader 是一个用来读取 .jsonl 文件的包

它会返回一个可迭代对象,这个对象的每一项是一个 “dict” 类型的数据,储存着 .jsonl 文件的每一行 json 对象

不一定是 “dict” 类型的数据,只是 python 在处理 json 文件时通常使用 dict 类型处理,实际上,也可以是元组或者其它的数据类型


一个寻常的使用用例如下:

# 1. 首先定义如下的一个类
class JSONLDataset(Dataset):
    # 当你创建一个类的新实例时,__init__方法会被自动调用,用来初始化实例的属性。
    def __init__(self, file_path):
        self.data = []
        with open(file_path, 'r', encoding='utf-8') as f:
            # .jsonl 的文件的每一行使用 json.loads 去加载它
            for line in f:
                self.data.append(json.loads(line.strip()))

    # 使用 len(这个类的对象) 时,会返回 __len__ 函数返回的东西
    def __len__(self):
        return len(self.data)

    # 使用 这个类的对象[integer] 时,会返回 __getitem__ 函数返回的东西
    def __getitem__(self, idx):
        return self.data[idx]

# 2. 使用这个类,从 'train.jsonl' 读取训练集数据
train_dataset = JSONLDataset('train.jsonl')

# 3. 使用 train_dataset 和 DataLoader,把 .jsonl 中的数据批次化处理,每 batch_size(如32) 个数据为一个批次
train_data_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)

# 4. 打印这个可迭代对象里的数据
for batch in train_data_loader:
    print("=============================== start ================================")
    print(type(batch))
    print(batch)
    print("===============================  end  ================================")

一个不太寻常的使用用例如下,我们用 DataLoader 来批次化处理内置数据集 SST2

train_iter = SST2(split="train")
dataloader = DataLoader(
    train_iter, batch_size=8, shuffle=False, collate_fn=collate_batch
)

经过验证,这里的 dataloader 中的每一项都是 tuple 类型



http://www.kler.cn/news/272985.html

相关文章:

  • 第六十回 吴用智赚玉麒麟 张顺夜闹金沙渡-飞桨科学计算套件PaddleScience
  • vue3使用v-md-editor:vue3的markdown编辑器
  • 【送书福利!第一期】《ARM汇编与逆向工程》
  • 【论文笔记合集】ARIMA 非平稳过程通过差分转化为平稳过程
  • 【蓝桥杯选拔赛真题65】python输出三个字符 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析
  • P1514 [NOIP2010 提高组] 引水入城
  • 21-分支和循环语句_while语句(中)(初阶)
  • docker引擎
  • 德迅蜂巢(容器安全)全面出击
  • windows平台Qt5连接wifi
  • Linux重命名文件有几种方法
  • [java基础揉碎]Object类详解
  • web蓝桥杯真题:成语学习
  • C++容器适配器与stack,queue,priority_queue(优先级队列)的实现以及仿函数(函数对象)与deque的简单介绍
  • XSS基础知识
  • C# 如何解决主线程堵塞问题
  • 归并排序思路
  • el-select 选择后获取key 和label的值
  • STM32实验DMA数据搬运小助手
  • 使用JDK11字段http客户端发送http请求