首页 > 其他分享 >训练准备工作(六)

训练准备工作(六)

时间:2024-06-22 20:59:20浏览次数:11  
标签:dataloader 训练 DataLoader dataset 工作 train 准备 loaders data

def train_model(model,
                dataset,
                cfg,
                validate=False,
                test=dict(test_best=False, test_last=False),
                timestamp=None,
                meta=None):
    """Train model entry function.

    Args:
        model (nn.Module): The model to be trained.
        dataset (:obj:`Dataset`): Train dataset.
        cfg (dict): The config dict for training.
        validate (bool): Whether to do evaluation. Default: False.
        test (dict): The testing option, with two keys: test_last & test_best.
            The value is True or False, indicating whether to test the
            corresponding checkpoint.
            Default: dict(test_best=False, test_last=False).
        timestamp (str | None): Local time for runner. Default: None.
        meta (dict | None): Meta dict to record some important information.
            Default: None
    """
    logger = get_root_logger(log_level=cfg.get('log_level', 'INFO'))

    # prepare data loaders
    dataset = dataset if isinstance(dataset, (list, tuple)) else [dataset]

    dataloader_setting = dict(
        videos_per_gpu=cfg.data.get('videos_per_gpu', 1),
        workers_per_gpu=cfg.data.get('workers_per_gpu', 1),
        persistent_workers=cfg.data.get('persistent_workers', False),
        seed=cfg.seed)
    dataloader_setting = dict(dataloader_setting,
                              **cfg.data.get('train_dataloader', {}))

    data_loaders = [
        build_dataloader(ds, **dataloader_setting) for ds in dataset
    ]

data_loaders的数据类型是列表,[<torch.utils.data.dataloader.DataLoader object at 0x7f4b3bfc7b90>]

dataset 变量是列表,[<pyskl.datasets.dataset_wrappers.RepeatDataset object at 0x7fe7b3668550>]

既然 dataset 变量是一个包含 RepeatDataset 对象的列表,那么这段代码的实现就更加清晰了。

RepeatDataset 是一个数据集包装器,可以对原始数据集进行重复采样,以增加训练样本的数量。

在这种情况下,build_dataloader() 函数会为 dataset 列表中的每个 RepeatDataset 对象创建一个对应的 DataLoader 对象,并将它们存储在 data_loaders 列表中。

这种设计方式有以下好处:

  1. 可以同时处理多个数据集,每个数据集都有独立的 DataLoader
  2. 通过使用 RepeatDataset,可以对数据集进行重复采样,增加训练样本的数量。
  3. 将 DataLoader 对象存储在 data_loaders 列表中,方便后续的训练和评估操作。

总的来说,这段代码的实现逻辑是合理的,能够灵活地处理多个数据集,并对数据进行重复采样。

怎么发现data_loaders不应该是DataLoader类进行实例化的吗?比如train_dataloader = DataLoader(train_data, batch-size=16)这样?

事实上,在这段代码中,data_loaders 是正确地使用 DataLoader 类进行实例化的。

让我们回顾一下您提到的示例代码:

train_dataloader = DataLoader(train_data, batch_size=16)

这段代码是正确的,它创建了一个 DataLoader 对象,用于加载训练数据。

在前面的代码中,data_loaders 是一个列表,其中包含了多个 DataLoader 对象。这是因为原始的 dataset 变量可能包含多个数据集对象,因此需要为每个数据集创建一个 DataLoader

所以,data_loaders 是正确的,它是一个包含多个 DataLoader 对象的列表,而不是直接使用 DataLoader 类进行实例化。

相比之下,您提到的 train_dataloader = DataLoader(train_data, batch_size=16) 是一个单独的 DataLoader 对象,用于加载训练数据。这种方式也是正确的,只是与原始代码中的 data_loaders 实现有所不同。

总结来说,原始代码中的 data_loaders 是正确的,它是一个 DataLoader 对象的列表,用于处理可能包含多个数据集的情况。您提到的 train_dataloader = DataLoader(train_data, batch_size=16) 也是正确的,只是处理了单个训练数据集的情况。两种实现方式都是合理的,只是根据具体的需求而采用不同的方式。

pyskl/pyskl/apis/train.py at main · kennymckormick/pyskl · GitHub

标签:dataloader,训练,DataLoader,dataset,工作,train,准备,loaders,data
From: https://blog.csdn.net/qq_34425255/article/details/139887939

相关文章

  • 芝麻清单助力提升学习&工作效率 专注时间完成有效的待办事项
    芝麻清单助力提升学习&工作效率专注时间完成有效的工作。今天我们给大家带来一个专注清单,一个更高效的学习和工作的方法!我们都知道,专注做一个事情,会有效的提升效率,让事情更高效的完成。如果是学习的话,专注去学习效果更加的明显。许多人都不容易做到专注一个事情,我们需要一个......
  • ASP.NET Core Blzor 1:创建准备项目
      本章将创建贯穿本书这一部分的示例项目。1创建项目dotnetnewglobaljson--sdk-version3.1.101--outputMyAdvanceddotnetnewweb--no-https--outputMyAdvanced--frameworknetcoreapp3.1dotnetnewsln-oMyAdvanceddotnetslnMyAdvancedaddMyAdvanced ......
  • 性能实战训练营 - 性能测试核心知识(一)
     请求先到web服务器,web服务器只能处理静态资源,jpgcss这些,web服务器处理不了的请求,会转发给应用服务器,如phpjsp等;应用服务器开始执行这个代码,里面可能有逻辑处理、访问数据库等,做完后,把结果再交给web服务器,web服务器将它转化为html,处理过的静态网页; 1次click32次hit(客户......
  • 哪些工作需要在Linux系统下进行编程
    在Linux环境下进行编程的工作涵盖了广泛的领域,从系统底层到应用层,从单一的脚本编写到复杂的应用和服务开发。以下是一些主要的职位,这些职位常常需要在Linux环境下进行编程:linux1.**系统管理员**:  -编写自动化脚本来管理服务器和网络设备。  -开发监控脚本和工具。......
  • 20240622训练
    文件名是abcd的逆天考试(算术(a)题面:给定一个长度为\(n\)的整数数列\(a_1,\dots,a_n\),求有多少个有序对\((i,j)\)满足\(i<j\wedgea_ia_j<a_i+a_j\)题解:枚举\(j\),有\(a_i(a_j-1)<a_j\),对\(a_j\)分类讨论。当\(a_j>1\),\(a_i<a_j/(a_j-1)\),即\(a_i\le1\)。当\(a_j=1\),\(0......
  • 如何能去外企工作? 英语是走向世界的语言,数学是打开世界进步的知识。
    问本科求职者小丽,想去一家外企工作,需要英语掌握哪些知识?请举例说明并详细分析。 见微知著。相信自己的直觉,相信自己的眼光。自信,气质。 》》回答:外企求职英语要求分析概述求职者在面对外企工作时,英语能力往往是不可或缺的一项重要技能。外企对英语的要求可以从多个维度......
  • GPIO的工作模式
    输入模式:输入浮空、输入上拉、输入下拉、模拟输入输出模式:开漏输出、开漏复用功能、推挽式输出、推挽式输出复用功能输入浮空:输入上拉:输入下拉:开漏输出:开漏复用功能:推挽式输出:推挽式输出复用功能:......
  • 在Linux中,keepalive工作原理是什么及如何做到健康检查?
    Keepalived是一个用于Linux系统的高可用性解决方案,它主要通过VirtualRouterRedundancyProtocol(VRRP)协议来实现网络服务的高可用性和故障转移。其核心功能包括故障切换和健康检查,广泛应用于LVS负载均衡集群以及其他需要高可用性的场景。下面是Keepalived工作原理及......
  • java基础知识面试准备 第三天
    &和&&的区别        &和&&都是Java中的逻辑运算符,用于判断两个布尔表达式的逻辑关系(&和&&的优先级不同,&&的优先级比&高),它们的区别如下:1.&是逻辑与运算符,它的两个操作数都会被求值,只有当两个操作数都为true时,结果才为true;即使第一个操作数为false,第二个操作数也会......
  • 今天在地铁认识一个女程序员,在外包公司工作三年,只赔偿4000
    “下一站,xx软件园……”地铁广播响起,车厢里再次骚动起来。提着电脑包的、抱着文件袋的,一个个行色匆匆,奔赴各自的“战场”。在这熙熙攘攘的人群中,我注意到了一位特别的女生。她看起来很年轻,却难掩眉宇间的疲惫和迷茫。我们偶然间聊了起来,得知她叫小雨(化名),985硕士毕业,今年刚......