返回顶部
首页 > 资讯 > 精选 >pytorch如何实现多个Dataloader同时训练
  • 868
分享到

pytorch如何实现多个Dataloader同时训练

2023-06-15 07:06:33 868人浏览 独家记忆
摘要

小编给大家分享一下PyTorch如何实现多个Dataloader同时训练,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!看代码吧~如果两个dataloader的长度

小编给大家分享一下PyTorch如何实现多个Dataloader同时训练,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

看代码吧~

pytorch如何实现多个Dataloader同时训练

如果两个dataloader的长度不一样,那就加个:

from itertools import cycle

仅使用zip,迭代器将在长度等于最小数据集的长度时耗尽。 但是,使用cycle时,我们将再次重复最小的数据集,除非迭代器查看最大数据集中的所有样本。

pytorch如何实现多个Dataloader同时训练

补充:pytorch技巧:自定义数据集 torch.utils.data.DataLoader 及Dataset的使用

本博客中有可直接运行的例子,便于直观的理解,在torch环境中运行即可。

1. 数据传递机制

在 pytorch 中数据传递按一下顺序:

创建 datasets ,也就是所需要读取的数据集。

把 datasets 传入DataLoader。

DataLoader迭代产生训练数据提供给模型。

2. torch.utils.data.Dataset

Pytorch提供两种数据集:

Map式数据集 Iterable式数据集。其中Map式数据集继承torch.utils.data.Dataset,Iterable式数据集继承torch.utils.data.IterableDataset。

本文只介绍 Map式数据集。

一个Map式的数据集必须要重写 __getitem__(self, index)、 __len__(self) 两个方法,用来表示从索引到样本的映射(Map)。 __getitem__(self, index)按索引映射到对应的数据, __len__(self)则会返回这个数据集的长度。

基本格式如下:

 import torch.utils.data as dataclass VOCDetection(data.Dataset):    '''    必须继承data.Dataset类    '''    def __init__(self):        '''        在这里进行初始化,一般是初始化文件路径或文件列表        '''        pass    def __getitem__(self, index):        '''        1. 按照index,读取文件中对应的数据  (读取一个数据!!!!我们常读取的数据是图片,一般我们送入模型的数据成批的,但在这里只是读取一张图片,成批后面会说到)        2. 对读取到的数据进行数据增强 (数据增强是深度学习中经常用到的,可以提高模型的泛化能力)        3. 返回数据对 (一般我们要返回 图片,对应的标签) 在这里因为我没有写完整的代码,返回值用 0 代替        '''        return 0    def __len__(self):        '''        返回数据集的长度        '''        return 0

可直接运行的例子:

import torch.utils.data as dataimport numpy as npx = np.array(range(80)).reshape(8, 10) # 模拟输入, 8个样本,每个样本长度为10y = np.array(range(8))  # 模拟对应样本的标签, 8个标签 class Mydataset(data.Dataset):    def __init__(self, x, y):        self.x = x        self.y = y        self.idx = list()        for item in x:            self.idx.append(item)        pass    def __getitem__(self, index):        input_data = self.idx[index] #可继续进行数据增强,这里没有进行数据增强操作        target = self.y[index]        return input_data, target    def __len__(self):        return len(self.idx)datasets = Mydataset(x, y)  # 初始化print(datasets.__len__())  # 调用__len__() 返回数据的长度for i in range(len(y)):    input_data, target = datasets.__getitem__(i)  # 调用__getitem__(index) 返回读取的数据对    print('input_data%d =' % i, input_data)    print('target%d = ' % i, target)

结果如下:

pytorch如何实现多个Dataloader同时训练

3. torch.utils.data.DataLoader

PyTorch中数据读取的一个重要接口是 torch.utils.data.DataLoader。

该接口主要用来将自定义的数据读取接口的输出或者PyTorch已有的数据读取接口的输入按照batch_size封装成Tensor,后续只需要再包装成Variable即可作为模型的输入。

torch.utils.data.DataLoader(onject)的可用参数如下:

dataset(Dataset): 数据读取接口,该输出是torch.utils.data.Dataset类的对象(或者继承自该类的自定义类的对象)。

batch_size (int, optional): 批训练数据量的大小,根据具体情况设置即可。一般为2的N次方(默认:1)

shuffle (bool, optional):是否打乱数据,一般在训练数据中会采用。(默认:False)

sampler (Sampler, optional):从数据集中提取样本的策略。如果指定,“shuffle”必须为false。我没有用过,不太了解。

batch_sampler (Sampler, optional):和batch_size、shuffle等参数互斥,一般用默认。

num_workers:这个参数必须大于等于0,为0时默认使用主线程读取数据,其他大于0的数表示通过多个进程来读取数据,可以加快数据读取速度,一般设置为2的N次方,且小于batch_size(默认:0)

collate_fn (callable, optional): 合并样本清单以形成小批量。用来处理不同情况下的输入dataset的封装。

pin_memory (bool, optional):如果设置为True,那么data loader将会在返回它们之前,将tensors拷贝到CUDA中的固定内存中.

drop_last (bool, optional): 如果数据集大小不能被批大小整除,则设置为“true”以除去最后一个未完成的批。如果“false”那么最后一批将更小。(默认:false)

timeout(numeric, optional):设置数据读取时间限制,超过这个时间还没读取到数据的话就会报错。(默认:0)

worker_init_fn (callable, optional): 每个worker初始化函数(默认:None)

可直接运行的例子:

import torch.utils.data as dataimport numpy as npx = np.array(range(80)).reshape(8, 10) # 模拟输入, 8个样本,每个样本长度为10y = np.array(range(8))  # 模拟对应样本的标签, 8个标签class Mydataset(data.Dataset):    def __init__(self, x, y):        self.x = x        self.y = y        self.idx = list()        for item in x:            self.idx.append(item)        pass    def __getitem__(self, index):        input_data = self.idx[index]        target = self.y[index]        return input_data, target    def __len__(self):        return len(self.idx)if __name__ ==('__main__'):    datasets = Mydataset(x, y)  # 初始化    dataloader = data.DataLoader(datasets, batch_size=4, num_workers=2)     for i, (input_data, target) in enumerate(dataloader):        print('input_data%d' % i, input_data)        print('target%d' % i, target)

结果如下:(注意看类别,DataLoader把数据封装为Tensor)

pytorch如何实现多个Dataloader同时训练

以上是“pytorch如何实现多个Dataloader同时训练”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: pytorch如何实现多个Dataloader同时训练

本文链接: https://lsjlt.com/news/278515.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • pytorch如何实现多个Dataloader同时训练
    小编给大家分享一下pytorch如何实现多个Dataloader同时训练,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!看代码吧~如果两个dataloader的长度...
    99+
    2023-06-15
  • pytorch 实现多个Dataloader同时训练
    看代码吧~ 如果两个dataloader的长度不一样,那就加个: from itertools import cycle 仅使用zip,迭代器将在长度等于最小数据集的长度时...
    99+
    2024-04-02
  • pytorch 两个GPU同时训练的解决方案
    使用场景 我有两个GPU卡。我希望我两个GPU能并行运行两个网络模型。 代码 错误代码1: #对于0号GPU os.environ['CUDA_VISIBLE_DEVICES']...
    99+
    2024-04-02
  • pytorch多gpu并行训练怎么实现
    在PyTorch中实现多GPU并行训练可以通过使用torch.nn.DataParallel模块或torch.nn.parallel...
    99+
    2024-04-02
  • PaddlePaddle如何实现多GPU训练
    PaddlePaddle通过数据并行的方式实现多GPU训练。在进行多GPU训练时,PaddlePaddle会将数据均匀地分配到每个G...
    99+
    2024-04-02
  • Pytorch 如何训练网络时调整学习率
    为了得到更好的网络,学习率通常是要调整的,即刚开始用较大的学习率来加快网络的训练,之后为了提高精确度,需要将学习率调低一点。 如图所示,步长(学习率)太大容易跨过最优解。 代码如下...
    99+
    2024-04-02
  • 详解如何使用Pytorch进行多卡训练
    目录1.DP2.DDP2.1Pytorch分布式基础2.2Pytorch分布式训练DEMO当一块GPU不够用时,我们就需要使用多卡进行并行训练。其中多卡并行可分为数据并行和模型并行。...
    99+
    2024-04-02
  • 使用PyTorch训练LSTM时出现loss.backward()报错如何解决
    使用PyTorch训练LSTM时出现loss.backward()报错如何解决?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。正确做法:LSRM / RNN模...
    99+
    2023-06-15
  • 如何在Torch中实现多GPU训练
    在Torch中实现多GPU训练可以通过使用nn.DataParallel模块来实现。nn.DataParallel模块可以将模型复制...
    99+
    2024-04-02
  • vue如何实现同时设置多个倒计时
    这篇文章主要介绍vue如何实现同时设置多个倒计时,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下html如下:<div class="home"> &nb...
    99+
    2023-06-15
  • 如何在TensorFlow中实现对抗训练
    在TensorFlow中实现对抗训练通常涉及使用生成对抗网络(GAN)。GAN是由一个生成器和一个判别器组成的两个网络,它们相互对抗...
    99+
    2024-03-01
    TensorFlow
  • Keras中如何实现对抗性训练
    对抗性训练是一种用于增强模型对抗攻击的方法。在Keras中,可以通过以下步骤实现对抗性训练: 导入所需的库: import te...
    99+
    2024-04-02
  • 如何在Caffe中利用多个GPU进行并行训练
    要在Caffe中利用多个GPU进行并行训练,您可以使用以下步骤: 配置Caffe以支持多GPU训练。首先,您需要将Caffe编译...
    99+
    2024-04-02
  • vue实现同时设置多个倒计时
    本文实例为大家分享了vue实现同时设置多个倒计时的具体代码,供大家参考,具体内容如下 html如下: <div class="home"> <tbody...
    99+
    2024-04-02
  • JS/jquery如何实现一个网页内同时调用多个倒计时
    小编给大家分享一下JS/jquery如何实现一个网页内同时调用多个倒计时,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!效果如:v...
    99+
    2024-04-02
  • Python如何实现自动驾驶训练模型
    本篇内容主要讲解“Python如何实现自动驾驶训练模型”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何实现自动驾驶训练模型”吧!一、安装环境gym是用于开发和比较强化学习算法的工具...
    99+
    2023-07-02
  • pytorch如何实现多个反向传播操作
    小编给大家分享一下pytorch如何实现多个反向传播操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!从一个错误说起:RuntimeError: Trying t...
    99+
    2023-06-15
  • springBoot @Scheduled如何实现多个任务同时开始执行
    springBoot @Scheduled如何实现多个任务同时开始执行,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。@Scheduled多个任务同时开始执行只需在...
    99+
    2023-06-22
  • Python基于keras训练如何实现微笑识别
    这篇文章主要介绍Python基于keras训练如何实现微笑识别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、数据预处理实验数据来自genki4k提取含有完整人脸的图片def init_file():&n...
    99+
    2023-06-29
  • Java 如何同时返回多个不同类型
    目录Java 同时返回多个不同类型前言首先我们创建一个2维元组我们可以利用继承机制实现长度更长的元组实例java return返回多个值或多种类型的值方法(list;Map)1、在写...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作