首页 > 解决方案 > 在 Pytorch 数据加载器中使用数据混洗的影响

问题描述

我实现了一个图像分类网络,通过使用 Alexnet 作为预训练模型并更改最终输出层来对 100 个类别的数据集进行分类。我注意到当我加载我的数据时

trainloader = torch.utils.data.DataLoader(train_data, batch_size=32, shuffle=False)

,我在大约 10 个 epoch 的验证数据集上获得了大约 2-3% 的准确度,但是当我刚刚更改shuffle=True并重新训练网络时,第一个 epoch 本身的准确度就跃升至 70%。

我想知道是否发生这种情况是因为在第一种情况下,网络在一个示例中连续显示一个示例,仅针对少数示例的一个类,导致网络在训练期间泛化能力差,或者背后有其他原因吗?

但是,我没想到会产生如此巨大的影响。

PS:除了更改 shuffle 选项外,这两种情况的所有代码和参数都完全相同。

标签: neural-networkpytorch

解决方案


是的,它完全会影响结果!打乱我们用来拟合分类器的数据顺序非常重要,因为不同时期之间的批次看起来并不相似。

检查数据加载器文档,它说:“shuffle (bool, optional) – 设置为 True 让数据在每个时期都重新洗牌”

无论如何,它将使模型更加健壮并避免过度/欠拟合。

在您的情况下,准确性的大幅提高(由于缺乏对数据集的认识)可能是由于数据集是如何“组织”的,例如,每个类别都属于不同的批次,并且在每个时期,一个batch 包含相同的类别,这在您进行测试时会导致非常差的准确性。


推荐阅读