【Pytorch 02】Dataset类 和 Dataloader类

目录

1. Dataset类 和 Dataloader类 介绍

2. 查看 Dataset 使用

3. Dataset 使用实例

【重点】4. DataLoader 使用示例


1. Dataset类 和 Dataloader类 介绍

DataSetDataloader

提供一种方式去获取数据及其label

如何获取每一个数据及其label

告诉我们总共有多少的数据

为后面的网络提供不同的数据形式

2. 查看 Dataset 使用

在 jupyter notebook 中依次输入这三条语句,可以比较清晰的看到Dataset使用说明

from torch.utils.data import Dataset
help(Dataset)
DataSet??

3. Dataset 使用实例

数据集下载:

https://download.pytorch.org/tutorial/hymenoptera_data.ziphttp://xn--ghqv0hnrco1y6hay8g1u5dq0qia59jfip33gbebd90d

# 作者:要努力,努力,再努力
# 开发时间:2022/5/2 8:56

from PIL import Image
from torch.utils.data import Dataset
import os


class MyData(Dataset):
    def __init__(self, root_dir, label_dir):
        self.root_dir = root_dir
        self.label_dir = label_dir
        self.img_path = os.path.join(self.root_dir, self.label_dir)
        self.img_path_list = os.listdir(self.img_path)

    def __getitem__(self, idx):
        img_item_path = os.path.join(self.root_dir, self.label_dir, self.img_path_list[idx])
        img = Image.open(img_item_path)

        file_name = 'D:/Workspaces/pycharm/pythontorch/' + self.root_dir + '/ants_labels/' + self.img_path_list[idx] + '.txt'
        if not os.path.exists(file_name):
            with open(file_name, 'w', encoding='utf-8') as rfile:
                rfile.write(self.label_dir)

        label = self.label_dir
        return img

    def __len__(self):
        return len(self.img_path_list)


root_dir = 'dataset/train'
ants_label_dir = 'ants_images'
bees_root_dir = 'bees_images'

if __name__ == '__main__':
    ants_data = MyData(root_dir, ants_label_dir)
    print(len(ants_data))
    for i in range(len(ants_data)):
        ant_img = ants_data[i]
    # ant_img.show()

    bees_data = MyData(root_dir, bees_root_dir)
    bee_img = bees_data[0]
    # bee_img.show()

    total = ants_data + bees_data  # 继承 Dataset 后可以直接相加
    # total[1].show()

【重点】4. DataLoader 使用示例

# 作者:要努力,努力,再努力
# 开发时间:2022/5/4 13:52
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from torchvision import datasets

test_set = datasets.CIFAR10(root='../chap04dataset_transform/dataset', train=False, transform=transforms.ToTensor(),
                            download=True)

# batch_size 每次从测试数据集中取四个数据
# shuffle 是否打乱, true 不一样 false 一样
# num_workers 默认为0 表示主进程  num_workers>0 在window可能会为0
# drop_last 最后的数据是否舍弃,true 舍弃,false 不舍弃
# 打断点 可以看到是RandomSample ,默认用随机抓取的方式
test_loader = DataLoader(dataset=test_set, batch_size=64, shuffle=True, num_workers=0, drop_last=False)

# CIFAR10 中 __getitem__ 返回 img, target
img, target = test_set[0]  # 测试数据集中第一张图片
print(img.shape)  # 图片大小
print(target)  # 图片位置

writer = SummaryWriter('logs')


for ep in range(2):
    step = 0
    for datas in test_loader:
        imgs, targets = datas

        # print(imgs.shape)  # torch.Size([4, 3, 32, 32])  4张图片-3通道-32*32
        # print(targets)  # tensor([8, 1, 3, 6]) 取target 为 8 1 3 6 的图片
        writer.add_images('ep:{}'.format(ep), imgs, step)  # 注意不是 add_image()
        step += 1

writer.close()



 

### 回答1: DatasetDataLoaderPyTorch 中用于加载和处理数据的两个主要组件。Dataset 用于从数据源中提取和加载数据,DataLoader 则用于将数据转换为适合机器学习模型训练的格式。 ### 回答2: 在PyTorch中,DatasetDataLoader是用于处理和加载数据的两个重要Dataset是一个抽象,用于表示数据集对象。我们可以自定义Dataset来处理我们自己的数据集。通过继承Dataset,我们需要实现两个主要方法: - __len__()方法:返回数据集的大小(样本数量) - __getitem__(idx)方法:返回索引为idx的样本数据 使用Dataset的好处是可以统一处理训练集、验证集和测试集等不同的数据集,将数据进行一致的格式化和预处理。 DataLoader是一个实用工具,用于将Dataset对象加载成批量数据。数据加载器可以根据指定的批大小、是否混洗样本和多线程加载等选项来提供高效的数据加载方式。DataLoader是一个可迭代对象,每次迭代返回一个批次的数据。我们可以通过循环遍历DataLoader对象来获取数据。 使用DataLoader可以实现以下功能: - 数据批处理:将数据集划分为批次,并且可以指定每个批次的大小。 - 数据混洗:可以通过设置shuffle选项来随机打乱数据集,以便更好地训练模型。 - 并行加载:可以通过设置num_workers选项来指定使用多少个子进程来加载数据,加速数据加载过程。 综上所述,DatasetDataLoaderPyTorch中用于处理和加载数据的两个重要Dataset用于表示数据集对象,我们可以自定义Dataset来处理我们自己的数据集。而DataLoader是一个实用工具,用于将Dataset对象加载成批量数据,提供高效的数据加载方式,支持数据批处理、数据混洗和并行加载等功能。 ### 回答3: 在pytorch中,Dataset是一个用来表示数据的抽象,它封装了数据集的访问方式和数据的获取方法。Dataset提供了读取、处理和转换数据的功能,可以灵活地处理各种型的数据集,包括图像、语音、文本等。用户可以继承Dataset并实现自己的数据集,根据实际需求定制数据集。 Dataloader是一个用来加载数据的迭代器,它通过Dataset对象来获取数据,并按照指定的batch size进行分批处理。Dataloader可以实现多线程并行加载数据,提高数据读取效率。在训练模型时,通常将Dataset对象传入Dataloader进行数据加载,并通过循环遍历Dataloader来获取每个batch的数据进行训练。 DatasetDataloader通常配合使用,Dataset用于数据的读取和预处理,Dataloader用于并行加载和分批处理数据。使用DatasetDataloader的好处是可以轻松地处理大规模数据集,实现高效的数据加载和预处理。此外,DatasetDataloader还提供了数据打乱、重复采样、数据划分等功能,可以灵活地控制数据的访问和使用。 总之,DatasetDataloaderpytorch中重要的数据处理模块,它们提供了方便的接口和功能,用于加载、处理和管理数据集,为模型训练和评估提供了便利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不菜不菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值