Dataset和Dataloader|读取图片

  • Dataset 加载数据集-使之支持索引
  • DataLoader方便使用的时候拿出一个Mini-Batch来使用

1.为什么是Mini-Batch

  • 罗翔老师喜欢说“正说反说折中说”,这里也是类似,我们使用一个样本的随机性来帮我们跨越鞍点(但速度太慢),使用Batch得到向量计算的优势,最大的提高计算速度(但准确率有差)。

  • 而Mini-Batch就是每次既不是取一个,也不是取全部。而是把全部的分成几组,取其中的一个,这样就能很好的均衡这两种的优势,达到效果和效率的均衡点。

2.与Mini-Batch相关的概念

  • Epoch训练的周期(即对全部的样本都参与了训练(前馈、反馈和更新))
  • Batchsize进行一次训练需要的样本数量
  • Iterations就是迭代次数、(iterable对象需要使用yield)
  • iterations=epoch/batchsize

3.dataloader

4.code

import torch
from torch.utils.data import Dataset
#Dataset是一个抽象类,抽象类不能实例化
#我们需要定义自己的类从这里继承,再构建自己实例化的类
from torch.utils.data import DataLoader
#处理数据处
class MyDataset(Dataset):
	def __init__(self,filepath):#filepath文件在哪
	#直接这里读数据没有必要,常常图片数据集都很大,不能都读到内存中
		pass
	def __getitem__(self,index):#getitem(for dataset[index])
		pass
	def __len__(self):
		pass
dataset=MyDataset("mytest.xyz")#具体自己写
trainloader = DataLoader(dataset=dataset,batch_size=32,shuffle=True,num_workers=2)

#在训练时
for epoch in range(100):
	for i,data in emumerate(train_loader,0):
	...

注意在window直接运行dataloader可能会报错,常常我们把它封装到if语句中如下:

if __name__ == '__main__':

5.pytorch

pytorch的datasets给我们提供了很多实例
在这里插入图片描述

在这里插入图片描述

来自B站刘二大人的pytorch实践课程

6.实战读取图片

具体的数据读取的时候可以使用OpenCV或者PIL两种方法,他们在具体的数据处理上也是不一样的,我更喜欢用PIL的方式。
使用(点击链接下载)UIEBD dataset数据集的raw-890为例()

import numpy as np
import torch
from torch.utils.data.dataset import Dataset
from torch.utils.data.dataloader import DataLoader
from torchvision.transforms import transforms
from pathlib import Path

from torch.utils.tensorboard import SummaryWriter
from PIL import Image

transform = transforms.Compose([
            transforms.Resize(350), #缩放图片保持长宽比不变,最短边为350像素
            transforms.CenterCrop(320), #从图片中间切出320*320的图片
            transforms.ToTensor(), #将图片(Image)转成Tensor,归一化至(0,1)
            #需要对OpenCV读取的图像进行归一化处理才能与PIL读取的图像一致


            #transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) 
            #常用标准化  
        ])

class MyDataset(Dataset):
    def __init__(self,path,transform =None):
        images_pth = Path(path)
        image_list = list(images_pth.glob('*.png'))
        image_list_str = [str(x) for x in image_list]
        self.images = image_list_str


    def __getitem__(self, index):
        image_path = self.images[index]
        image = Image.open(image_path)
        image = transform(image)
        return image


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

dataset = MyDataset(path = "你的路径\\raw-890",transform=transforms)
dataloader = DataLoader(dataset, batch_size=128, shuffle=True, num_workers=0)#128迭代少一点,一定要先使用transform转换成tensor对象
writer = SummaryWriter("你的名字")
step = 0  
# 从test_loader中选取数据集data,其中data数据集是由dataloader加载器生成的以batch_size=128为单位的数据集
for data in dataloader:
    imgs = data 
    writer.add_images("dataloader", imgs, step)
    step = step + 1
writer.close()

输入tensorboard --logdir == " your name"就能显示出我们设置的dataloader了

在这里插入图片描述
在这里插入图片描述
当然最后一个batch_size如果不够的话,肯定是真的读到结尾而没有一个batch_size的大小了。😃

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: DatasetDataLoaderPyTorch 用于加载和处理数据的两个主要组件。Dataset 用于从数据提取和加载数据DataLoader 则用于将数据转换为适合机器学习模型训练的格式。 ### 回答2: 在PyTorchDatasetDataLoader是用于处理和加载数据的两个重要类。 Dataset是一个抽象类,用于表示数据集对象。我们可以自定义Dataset子类来处理我们自己的数据集。通过继承Dataset类,我们需要实现两个主要方法: - __len__()方法:返回数据集的大小(样本数量) - __getitem__(idx)方法:返回索引为idx的样本数据 使用Dataset类的好处是可以统一处理训练集、验证集和测试集等不同的数据集,将数据进行一致的格式化和预处理。 DataLoader是一个实用工具,用于将Dataset对象加载成批量数据数据加载器可以根据指定的批大小、是否混洗样本和多线程加载等选项来提供高效的数据加载方式。DataLoader是一个可迭代对象,每次迭代返回一个批次的数据。我们可以通过循环遍历DataLoader对象来获取数据。 使用DataLoader可以实现以下功能: - 数据批处理:将数据集划分为批次,并且可以指定每个批次的大小。 - 数据混洗:可以通过设置shuffle选项来随机打乱数据集,以便更好地训练模型。 - 并行加载:可以通过设置num_workers选项来指定使用多少个子进程来加载数据,加速数据加载过程。 综上所述,DatasetDataLoaderPyTorch用于处理和加载数据的两个重要类。Dataset用于表示数据集对象,我们可以自定义Dataset子类来处理我们自己的数据集。而DataLoader是一个实用工具,用于将Dataset对象加载成批量数据,提供高效的数据加载方式,支持数据批处理、数据混洗和并行加载等功能。 ### 回答3: 在pytorchDataset是一个用来表示数据的抽象类,它封装了数据集的访问方式和数据的获取方法。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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值