pytorch 官网给出的例子中都是使用了已经定义好的特殊数据集接口来加载数据,而且其使用的数据都是官方给出的数据。如果我们有自己收集的数据集,如何用来训练网络呢?此时需要我们自己定义好数据处理接口。幸运的是pytroch给出了一个数据集接口类(torch.utils.data.Dataset),可以方便我们继承并实现自己的数据集接口。
torch.utils.data
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)
以上这篇pytorch 自定义数据集加载方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
本文向大家介绍Pytorch 实现数据集自定义读取,包括了Pytorch 实现数据集自定义读取的使用技巧和注意事项,需要的朋友参考一下 以读取VOC2012语义分割数据集为例,具体见代码注释: VocDataset.py Train.py 以上这篇Pytorch 实现数据集自定义读取就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
我正试图修改这个来自的前馈网络https://github.com/yunjey/pytorch-tutorial/blob/master/tutorials/01-basics/feedforward_neural_network/main.py 使用我自己的数据集。 我定义了一个自定义数据集,其中两个1微米数组作为输入,两个标量对应的输出: 我已更新超参数以匹配新的输入大小(2) 我还改变了t
PyTorch包含一个名为的包,用于加载和准备数据集。它包括两个基本功能,即和,它们有助于数据集的转换和加载。 数据集 数据集用于从给定数据集读取和转换数据点。实现的基本语法如下所述 - 用于随机播放和批量处理数据。它可用于与多处理工作程序并行加载数据。 示例:加载CSV文件 使用Python包Panda来加载csv文件。原始文件具有以下格式:(图像名称,68个标记 - 每个标记具有,坐标)。
问题内容: 如何利用和自己的数据(而不仅仅是)? 有没有一种方法可以使用它们用于任何数据集的内置方法? 问题答案: 是的,那是可能的。只需自己创建对象,例如 其中,和是张量。必须为2D,即矩阵,其中每行代表一个训练样本,并且可以为1D或2D,具体取决于您要预测标量还是矢量。 希望有帮助! 编辑 :对@sarthak的问题的答复 基本上是。如果您创建了类型的对象,则构造函数将调查特征张量(实际上称为
对于在时间序列数据上实现PyTorch数据管道的“最佳实践”,我有点困惑。 我有一个HD5文件,我使用自定义DataLoader读取。似乎我应该返回数据样本作为一个(特征,目标)元组,每个元组的形状是(L,C),其中L是seq_len,C是通道数-即不要在数据加载器中预制批处理,只需返回一个表。 PyTorch模块似乎需要一个批处理暗淡,即。Conv1D期望(N,C,L)。 我的印象是,类将预先处
本文向大家介绍pytorch 自定义参数不更新方式,包括了pytorch 自定义参数不更新方式的使用技巧和注意事项,需要的朋友参考一下 nn.Module中定义参数:不需要加cuda,可以求导,反向传播 下面这个例子说明中间变量可能没有梯度,但是最终变量有梯度: cy1 cd都有梯度 以上这篇pytorch 自定义参数不更新方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支