Loading

【CV】【IRSRMamba】data_sampler.py里的扩大虚拟数据集是什么意思?

训练配置中设定 total_iter = 250000(总迭代 250k 次)
不扩大的话,1000 张图每 epoch 完成,需要 250 个 epoch 才能达到 250k 迭代
扩大 10 倍后,1000 张图虚拟变成 10000 张,只需要 25 个 epoch 即可达到 250k 迭代 ✓
好的,我明白了,下面让我们来详细拆解一下这段分析的含义。

这段分析的核心是解释数据增强(虚拟扩大数据集)如何影响训练过程中的迭代次数(Iteration)和周期数(Epoch)的关系,从而帮助理解数据增强在实际训练中的作用。我们来逐一分解:

关键概念先明确

在深度学习训练中,这几个术语是基础,必须先理清:

  • 迭代(Iteration,简称 iter):训练模型时,每处理一个“批次(Batch)”的数据,就称为一次迭代。
    (比如 Batch Size=32,就是一次处理 32 张图片,完成一次参数更新,即 1 iter)
  • 周期(Epoch)遍历完“整个训练数据集”一次,称为一个 Epoch。
    (比如数据集有 1000 张图,Batch Size=32,那么 1 Epoch = 1000/32 ≈ 32 次迭代)
  • 总迭代(Total Iter):训练的目标是完成指定次数的参数更新(比如 250000 次),这是衡量训练量的核心指标。

原文分析的具体拆解

前提:

  • 总迭代目标:total_iter = 250000(需要完成 25 万次参数更新)
  • 原始数据集:1000 张图
  • 数据增强:扩大 10 倍(虚拟生成到 10000 张图)

1. 不扩大数据的情况:

  • 1 Epoch 对应的迭代数 = 原始数据量 / Batch Size
    (假设 Batch Size=1,简化计算:1 Epoch = 1000 次迭代)

  • 达到总迭代需要的 Epoch 数 = 总迭代数 / 1 Epoch 对应的迭代数
    → 250000 / 1000 = 250 个 Epoch

    (实际 Batch Size 不为 1 时,逻辑一致:比如 Batch Size=32,1 Epoch=1000/32≈32 iter,总 Epoch=250000/32≈7812,但原文用 Batch Size=1 简化,核心逻辑不变)

2. 扩大 10 倍数据的情况:

  • 虚拟数据集:1000×10=10000 张图
  • 1 Epoch 对应的迭代数 = 虚拟数据量 / Batch Size
    (同样 Batch Size=1:1 Epoch=10000 次迭代)
  • 达到总迭代需要的 Epoch 数 = 250000 / 10000 = 25 个 Epoch

核心结论

数据增强后,每个 Epoch 能完成的迭代次数变多了(因为数据量变大了),所以达到相同的总迭代目标,需要的 Epoch 数就减少了。

补充说明

  • 为什么要关注“总迭代”而不是“总 Epoch”?
    因为模型的参数更新次数(迭代数)直接决定了训练的“有效步数”,是影响模型收敛效果的关键;而 Epoch 只是“遍历数据集的次数”,其对应的迭代数取决于数据量和 Batch Size,因此不是衡量训练量的统一标准。
  • 数据增强的本质作用:
    不仅是“减少 Epoch 数”,更重要的是通过增加数据多样性,避免模型过拟合,同时在相同总迭代下,让模型看到更多“不同但相似”的样本,提升泛化能力。

总结

  • 这段分析是在说:数据增强通过扩大数据集规模,让每个训练周期(Epoch)包含更多的迭代步骤
  • 因此,在达到相同的总迭代次数目标时,所需的周期数就会减少。
  • 这背后的核心逻辑是:迭代次数(Iteration)才是衡量模型训练“工作量”的关键指标,而周期数(Epoch)则是一个相对的概念,取决于数据集的大小。

前几年的项目里用epoch的比较多,但是实际上看确实用iter比较合适,代表模型参数的每轮更新

(可以理解为取出数据集的部分数据对模型进行一次全量微调)

posted @ 2025-11-25 21:29  SaTsuki26681534  阅读(0)  评论(0)    收藏  举报