我在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
应该没问题。
此外,您可以使用超级收敛(例如将学习速率设置为 5
或 3
(非常快速地训练这些,请参阅本文或其他相关内容。我认为你可以在 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 的准确度。:)