性能指标根据批量大小发生显着变化

数据挖掘 神经网络 火炬 过拟合
2022-03-08 18:32:37

我正在研究一个二元分类问题,其中存在严重的类不平衡(少数类占近 10%)。该数据集有大约 15,000 个观察值,我将其拆分为训练、验证和测试集(分层)。

使用 PyTorch,我构建了一个具有 5 个全连接层(使用 ReLU 激活)、CrossEntropyLoss 和 SGD 优化器的神经网络。以下是我的部分代码

问题是我的训练与验证损失会根据批量大小(在 DataLoader 中传递)发生很大变化。如果我使用 64 的批量大小,损失函数看起来像

在此处输入图像描述

这很奇怪。但是,如果我使用非常规的大批量,比如 1000,它看起来像:在此处输入图像描述

这看起来更熟悉,但我无法理解这里出了什么问题。我还看到训练集相当快地达到高召回率(大约 4 个 epoch 之后),而验证集改善缓慢。所以似乎也存在过拟合的问题。

我真的不知道我哪里出错了:我的神经网络架构由 5 个完全连接的层组成,具有适当的输入和输出维度。我初始化权重。forward 函数将 ReLU 应用于输入(我不使用 Softmax,因为我只需要对 0 或 1 进行分类,所以我认为我可以简单地使用 argmax,请参见上面代码中的“c”变量)。

我尝试在 training_loader 中将 Shuffle 设置为 true,但这会产生高度波动的训练损失值。

1个回答

批量大小与学习率非常相关,尤其是在您使用的普通 SGD 等非自适应优化器中。

我建议两种选择: