Pytorch 加权随机取样器-过采样还是欠采样? 问题

Pytorch 加权随机取样器-过采样还是欠采样? 问题,pytorch,oversampling,pytorch-dataloader,Pytorch,Oversampling,Pytorch Dataloader,我正在PyTorch中为二进制分类培训一个深度学习模型,我有一个包含不平衡类比例的数据集。我的少数派班级占了给定观察值的10%。为了避免模型学习仅仅预测大多数类,我想在我的DataLoader中使用torch.utils.data中的WeightedRandomSampler 假设我有1000观察值(900在类0,100在类1),我的数据加载器的批量大小为100 如果没有加权随机抽样,我希望每个训练阶段由10个批次组成 问题 当使用此采样器时,每个历元将只对10个批次进行采样-因此,模型是否会

我正在PyTorch中为二进制分类培训一个深度学习模型,我有一个包含不平衡类比例的数据集。我的少数派班级占了给定观察值的10%。为了避免模型学习仅仅预测大多数类,我想在我的
DataLoader
中使用
torch.utils.data
中的
WeightedRandomSampler

假设我有
1000
观察值(
900
在类
0
100
在类
1
),我的数据加载器的批量大小为
100

如果没有加权随机抽样,我希望每个训练阶段由10个批次组成

问题
  • 当使用此采样器时,每个历元将只对10个批次进行采样-因此,模型是否会在每个历元中“遗漏”大部分多数类,因为现在少数类在训练批次中的比例过高
  • 使用采样器是否会导致每个历元取样超过10批(这意味着相同的少数群体观察可能会出现多次,而且训练速度会减慢)

这取决于您的目标,有关详细信息,请查看文档

有一个参数
num\u samples
,允许您指定当
Dataset
torch.utils.data.DataLoader
组合时实际创建的样本数(假设您正确加权):

  • 如果将其设置为
    len(数据集)
    ,您将得到第一个案例
  • 如果将其设置为
    1800
    (在您的情况下),您将获得第二个案例
当使用此采样器时,每个历元仅对10批样品进行取样,因此,模型是否会在每个历元中“遗漏”大部分样品[…]

是,但是新样本将在该历元结束后返回

使用采样器是否会导致每个历元取样超过10批(这意味着相同的少数群体观察可能会出现多次,而且训练速度会减慢)


培训不会放慢速度,每个历元将花费更长的时间,但收敛应该大致相同(因为每个历元中的数据较多,因此需要较少的历元)。

这是否回答了您的问题?还涉及: