为什么我在数据集上训练的 resnet110 CIFAR10只能获得 77% 的测试结果



我在CIFAR10数据集上训练了 Resnet110,我在训练时得到了 100% 的 acc,但在测试数据集上只有 77.85%。问题可能是什么? 否则,我使用Pytorch框架。 非常感谢你!

    ------------------------------------------------------------------------
Train Epoch: 200 [0/50000 (0%)] Loss: 0.000811, Accuracy: 100.00
Train Epoch: 200 [12800/50000 (26%)]    Loss: 0.000335, Accuracy: 100.00
Train Epoch: 200 [25600/50000 (51%)]    Loss: 0.000757, Accuracy: 100.00
Train Epoch: 200 [38400/50000 (77%)]    Loss: 0.000334, Accuracy: 100.00
Epoch time:45.98s
Accuracy of plane : 81 %
Accuracy of   car : 88 %
Accuracy of  bird : 65 %
Accuracy of   cat : 60 %
Accuracy of  deer : 73 %
Accuracy of   dog : 69 %    
Accuracy of  frog : 81 %
Accuracy of horse : 82 %
Accuracy of  ship : 86 %
Accuracy of truck : 86 %
Test set: Average loss: 1.3605, Accuracy: 77.58%

ResNet-101对于CIFAR10来说肯定太大了,使用较小的版本,ResNet-18来自torchvision应该没问题。

此外,您可以使用超级收敛(例如将学习速率设置为 53(非常快速地训练这些,请参阅本文或其他相关内容。我认为你可以在 18 个时代左右用torch.optim.AdamW做到这一点。此外,如此高的学习率起着正则作用,因为它只会收敛到真正平坦的最小区域。

为了不过度拟合,请使用真正强大的图像增强,旋转,翻转,剪切,也许是MixUp。您可以在第三方库中找到它们albumentations

你过度拟合这是显而易见的。摆脱过度拟合的最佳方法是训练更多数据。

为此,您可以使用此存储库进行数据增强。

您可以使用 cifar10 的特殊 resnet 架构,该架构可以让您获得高达 93% 的准确率。这种精度h/b是使用数据增强实现的。

规范神经网络(以减少过度拟合(的其他技术包括:

  • 辍学
  • 提前停止

以下是我如何更改 resnet18 添加 dropout:

from torchvision.models import resnet18
model = resnet18(pretrained=True)
model.fc = nn.Sequential(
    nn.Dropout(0.5),
    nn.Linear(512, 10)
)
model.to(dev)

请注意,在卷积层上添加dropout几乎从不使用。

还要检查此网址。 如您所见,没有人在 cifar10 上做到 100.00 的准确度。:)

最新更新