Pytorch数据加载

Pytorch数据加载

目录:

  • 数据集类
  • 数据加载器类
  • pytorch自带数据集
  • 参考资料

使用方法:

1.准备好Dataset实例

2.将dataset交给dataloader打乱顺序,组成batch

1.数据集类

要使用自定义数据集就要继承torch.utils.data.Dataset类,并实现Dataset类的 getitem()len() 方法
我们首先来看一下torch.utils.data.Dataset类源码是怎样写的:

class Dataset(object):
    """An abstract class representing a Dataset.

    All other datasets should subclass it. All subclasses should override
    ``__len__``, that provides the size of the dataset, and ``__getitem__``,
    supporting integer indexing in range from 0 to len(self) exclusive.
    """

    def __getitem__(self, index):
        raise NotImplementedError

    def __len__(self):
        raise NotImplementedError

    def __add__(self, other):
        return ConcatDataset([self, other])

因此当我们要自定义数据集时,要先实现这两个方法:

import torch
from torch.utils.data import Dataset, DataLoader

# 数据集存储路径,windows下需要加r
data_path = r"D:\progWorkspace\PyCharm_workspace\learningPyTorch\datasets"

# 完成数据集类,继承自Dataset类,需要实现两个方法
class MyDataset(Dataset):
    def __init__(self):
        pass

    # 返回指定位置的数据
    def __getitem__(self, index):
        pass

    # 返回数据集中的数据样本的个数
    def __len__(self):
        pass

2.数据加载器类

import torch
from torch.utils.data import Dataset, DataLoader

train_iter = DataLoader( dataset=dataset,          # 要加载的数据集,提前定义的Dataset类实例
                         shuffle=True,             # 是否打乱数据顺序
                         batch_size=batch_size     # 批次大小,即每批多少个样本
                         num_workers=num_worker    # 开启线程的数量
                         )
# 返回的train_iter是将原数据集dataset按照batch_size分完后的集合,即一个batch_size大小为一个iter
# 因此len(train_iter) = len(dataset) / batch_size 
# (有余数时,向上取整,假设共10个样本,batch_size=3,那么剩下的最后一个样本也是要按照一个batch来算的)

3.pytroch自带数据集

pytorch中的两个上层API:torchvision : 图像数据集,torchtext : 文本数据集
例如:
torchvision.datasets.MNIST( 手写数字图片数据 ),这与我们自定义的数据集(继承Dataset类)是一样的,它也是继承自Dataset类
这意味着直接对torchvision.datasets.MNIST进行实例化就可以得到Dataset的实例

#训练集样本
mnist_train = torchvision.datasets.MNIST( root='~/Datasets/MNIST',         #数据集文件下载或保存文件路径位置 
                                          train=True,                      #下载的数据集是否为训练集
                                          download=True,                   #是否下载,如果下载过了那么将download改成false即可
                                          transform=transforms.ToTensor()  #transform为对图像的处理函数,做一些想要的预处理
                                         )
#测试集样本
mnist_test = torchvision.datasets.MNIST(root='~/Datasets/MNIST', train=False, download=True, transform=transforms.ToTensor())

torchvision.transforms
1).torchvision.transforms.ToTensor()
将尺寸为 (H x W x C) 且数据位于[0, 255]的PIL图片或者数据类型为np.uint8的NumPy数组
转换为尺寸为(C x H x W)且数据类型为torch.float32且位于[0.0, 1.0]的Tensor。

2).torchvision.transforms.Normalize(mean, std)
利用给定的均值mean和方差std对Tensor进行规范化处理
即图像Tensor的像素值为:
normalized_image = (original_image - mean) / std

注意图像的深度,图像的深度值为多少就分别指定多少个mean和std值
例如:对于RGB深度为3的彩色图像,在对图像对应Tensor进行规范化处理时 trochvision.transforms.Normalize( (mean1, mean2, mean3), (std1, std2, std3) )

3).torchvision.transforms.Compose( transforms )
将多个transforms组合起来使用,数据经过Compose列表中的每个方法的处理

tranforms = torchvision.transforms.Compose([
			trochvision.transforms.ToTensor() #先转换为Tensor格式
			torchvision.transforms.Normalize( (mean1,mean2, mean3,...), (std1, std2, std3, ...) ) #进行正则标准化
			])
transforms = transforms.Compose([
			transforms.ToTensor(),
         	transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ])

train_set = torchvision.datasets.CIFAR10( root='./data', train=True,download=False, transform=transforms )
train_loader = torch.utils.data.DataLoader( train_set, batch_size=36,shuffle=True, num_workers=2 )

4.参考资料

动手学深度学习(pytorch版)

pytorch入门到精通

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值