<p>您可以检查PyTorch的<code>torch.utils.data.DataLoader</code><a href="https://pytorch.org/docs/stable/_modules/torch/utils/data/dataloader.html#DataLoader" rel="nofollow noreferrer">here</a>实现</p>
<p>如果指定<code>shuffle=True</code>,将使用<a href="https://pytorch.org/docs/stable/data.html#torch.utils.data.RandomSampler" rel="nofollow noreferrer">^{<cd3>}</a>(<code>SequentialSampler</code>否则)</p>
<p>当创建<code>DataLoader</code>的实例时,不会对任何内容进行洗牌,它只是实例化对象和其他类似设置的必要私有成员</p>
<p>当您在迭代过程中发出特殊的<code>__iter__</code>方法时,会返回一个名为<code>_SingleProcessDataLoader(self)</code>的特殊对象,它是一个数据生成器(可能是批处理、洗牌等,假设您不使用多处理)</p>
<p>要找到所有私有方法和帮助器相关的方法,有点像兔子洞,但它基本上是使用底层的<code>sampler</code>来获取用于从<code>torch.utils.data.Dataset</code>获取样本的索引</p>
<p>取样器一直运行到耗尽,过程重复(通常是一个历元)</p>
<blockquote>
<p>Will there be any randomness in the for loop after namesTrainLoader
was defined?</p>
</blockquote>
<p><strong>在每个周期开始时/epoch<code>RandomSampler</code>洗牌索引</strong>,因此是的,它将在每个epoch之前随机化(当调用<code>__iter__</code>并返回新的<code>_SingleProcessDataLoader(self)</code>),这可以无限期地进行</p>
<blockquote>
<p>[...] will "model" eventually see all the data in "namesTrainLoader"?</p>
</blockquote>
<p>是的,它很可能最终会看到所有的数据点</p>