技术标签: pytorch 深度学习 dataset Deep Learning
pytorch 官网给出的例子中都是使用了已经定义好的特殊数据集接口来加载数据,而且其使用的数据都是官方给出的数据。如果我们有自己收集的数据集,如何用来训练网络呢?此时需要我们自己定义好数据处理接口。幸运的是pytroch给出了一个数据集接口类(torch.utils.data.Dataset),可以方便我们继承并实现自己的数据集接口。
torch的这个文件包含了一些关于数据集处理的类。
class torch.utils.data.Dataset: 一个抽象类, 所有其他类的数据集类都应该是它的子类。而且其子类必须重载两个重要的函数:len(提供数据集的大小)、getitem(支持整数索引)。
class torch.utils.data.TensorDataset: 封装成tensor的数据集,每一个样本都通过索引张量来获得。
class torch.utils.data.ConcatDataset: 连接不同的数据集以构成更大的新数据集。
class torch.utils.data.Subset(dataset, indices): 获取指定一个索引序列对应的子数据集。
class torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, batch_sampler=None, num_workers=0, collate_fn=<function default_collate>, pin_memory=False, drop_last=False, timeout=0, worker_init_fn=None): 数据加载器。组合了一个数据集和采样器,并提供关于数据的迭代器。
torch.utils.data.random_split(dataset, lengths): 按照给定的长度将数据集划分成没有重叠的新数据集组合。
class torch.utils.data.Sampler(data_source):所有采样的器的基类。每个采样器子类都需要提供 __iter__ 方法以方便迭代器进行索引 和一个 len方法 以方便返回迭代器的长度。
class torch.utils.data.SequentialSampler(data_source):顺序采样样本,始终按照同一个顺序。
class torch.utils.data.RandomSampler(data_source):无放回地随机采样样本元素。
class torch.utils.data.SubsetRandomSampler(indices):无放回地按照给定的索引列表采样样本元素。
class torch.utils.data.WeightedRandomSampler(weights, num_samples, replacement=True): 按照给定的概率来采样样本。
class torch.utils.data.BatchSampler(sampler, batch_size, drop_last): 在一个batch中封装一个其他的采样器。
class torch.utils.data.distributed.DistributedSampler(dataset, num_replicas=None, rank=None):采样器可以约束数据加载进数据集的子集。
自己定义的数据集需要继承抽象类class torch.utils.data.Dataset,并且需要重载两个重要的函数:__len__ 和__getitem__。
整个代码仅供参考。在__init__中是初始化了该类的一些基本参数;__getitem__中是真正读取数据的地方,迭代器通过索引来读取数据集中数据,因此只需要这一个方法中加入读取数据的相关功能即可;__len__给出了整个数据集的尺寸大小,迭代器的索引范围是根据这个函数得来的。
import torch
class myDataset(torch.nn.data.Dataset):
def __init__(self, dataSource)
self.dataSource = dataSource
def __getitem__(self, index):
element = self.dataSource[index]
return element
def __len__(self):
return len(self.dataSource)
train_data = myDataset(dataSource)
class torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, batch_sampler=None, num_workers=0, collate_fn=<function default_collate>, pin_memory=False, drop_last=False, timeout=0, worker_init_fn=None): 数据加载器。组合了一个数据集和采样器,并提供关于数据的迭代器。
dataset (Dataset) – 需要加载的数据集(可以是自定义或者自带的数据集)。
batch_size – batch的大小(可选项,默认值为1)。
shuffle – 是否在每个epoch中shuffle整个数据集, 默认值为False。
sampler – 定义从数据中抽取样本的策略. 如果指定了, shuffle参数必须为False。
num_workers – 表示读取样本的线程数, 0表示只有主线程。
collate_fn – 合并一个样本列表称为一个batch。
pin_memory – 是否在返回数据之前将张量拷贝到CUDA。
drop_last (bool, optional) – 设置是否丢弃最后一个不完整的batch,默认为False。
timeout – 用来设置数据读取的超时时间的,但超过这个时间还没读取到数据的话就会报错。应该为非负整数。
train_loader=torch.utils.data.DataLoader(dataset=train_data, batch_size=64, shuffle=True)
[1] Pytorch官网
[2] PyTorch源码解读之torch.utils.data.DataLoader
[3] Pytorch创建自己的数据集
[4] PyTorch学习之路(level2)——自定义数据读
pytorch读取数据主要涉及到两个类:dataset和dataload,以读取图片为例子 dataset主要包括三个类: 首先初始化图片位置,一般写在初始化函数中 然后是根据图片位置去读取图片并返回读取的图片和标签: 最后返回数据集的长度,主要用于后续dataloader载入网络: 自定义数据集到这就初步完成了后续还有利用transform进行数据增强以及dataloader载入数据到网络中进行...
本篇博客旨在实现pytorch读取图片并自定义图片数据集 图像加载方法 主流的图像加载方法主要有三种 下表中xxx表示图片的路径 库 函数/方法 返回值 图像像素格式 像素值范围 图像矩阵表示 skimage io.imread(xxx) numpy.ndarray RGB [0, 255] (H X W X C) cv2 cv2.imread(xxx) numpy.ndarray BGR [0,...
使用Pytorch自定义数据集 参考:https://www.bilibili.com/video/BV1hE411t7RN?spm_id_from=333.999.0.0 蚂蚁蜜蜂/练手数据集:链接: https://pan.baidu.com/s/1jZoTmoFzaTLWh4lKBHVbEA 密码: 5suq Custom_dataset.py...
在非练习的情况下,我们使用torch去做深度学习时首先面对的就是如何把未经处理的数据整合成torch能识别的tensor。为此,torch提供了抽象类Datasets。 要自定义数据集,首先要继承抽象类class torch.utils.data.Dataset,并且需要重载两个重要的函数:__len__ 和__getitem__,前者提供了数据集的大小,后者支持整数索引,范围从0到len(sel...
由于Pytorch不支持内置的ImageNet数据集,因此我们需要自定义数据集。有两种方式 1、使用ImageFolder ImageFolder需要数据集有良好的结构,train和test下分别包含相同类别的文件夹,每个文件夹存放一类图像,也就是这样 此时把.../ImageNet/train 或者 .../ImageNet/test/ 当作imagenet_root传入ImageFolder即...
自定义数据集的代码如下: 现在我们的自定义数据集即将做好了,然后使用dataloader模块打包数据集: 接下来就可以开始训练啦!!! train fuction的代码: test function的代码: 一共使用5个epoch。因此代码如下:...
之前学习tensorflow时也学习了它的数据加载,不过在网上看了很多教程后还是有很多小问题,不知道为什么在别人电脑上可以运行但是我的就不行(把我头搞晕了),很烦,这时想起之前听导师说PyTorch容易入门上手,所以果断去学了PyTorch,写这篇博文的目的就是总结学到的,然后记录下来,也希望以后学到新的知识或技术能够用写博客的方式记录下来,这样有助于形成比较好的知识体系,也方便以后温故知新。 在...
实验环境:pytorch1.5 利用pytorch加载自定义数据集时,可利用pytorch自带的Dataset类进行。 只需要继承Dataset类,并实现其中的两个方法即可。 然后通过DataLoader类进行迭代即可。 DataLoader支持通过参数batch_size、drop_last和batch_sampler将单个获取的数据样本自动整理成批。 pytorch的自动微分: pytorch...
文章目录 编写自定义数据集,数据加载器和转换 一、使用ImageFolder数据集的格式时 1、只有train时的写法 2、有 train 和 val 时的写法 二、详细看看torchvision.datasets.ImageFolder这个类是怎么写的。 三、自定义自己的数据读取接口 编写自定义数据集,数据加载器和转换 解决任何机器学习问题都需要花费大量精力来准备数据。PyTorch提供了许多工...
PyTorch 导入需要的库 数据增强函数 导入数据并划分数据集 TensorFlow 导入需要的库 导入数据并划分数据集...