我在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%
答案 0 :(得分:2)
ResNet-101
对于CIFAR10绝对太大了,请使用较小的版本,torchvision
中的ResNet-18
应该没问题。
此外,您可以使用超级收敛(例如,将学习率设置为5
或3
来真正快速地训练那些人,请参见this article或其他相关知识。我认为您可以在torch.optim.AdamW
的18个左右的时间内完成此操作。此外,如此之高的学习率将起到正则化作用,因为它只会收敛到真正平坦的最小区域。
为了不过度拟合,请使用功能强大的图像增强,旋转,翻转,CutOut或MixUp。您可以在albumentations
第三方库中找到它们。
答案 1 :(得分:0)
这太过分了,这很明显。摆脱过度拟合的最佳方法是训练更多数据。
为此,您可以使用此repo进行数据扩充。
您为cifar10使用特殊的resnet体系结构,可以使您获得高达93%的准确性。使用数据增强可以达到这种精度h / b。
其他用于规范化神经网络(以减少过度拟合)的技术是:
这是我可以更改resnet18的方法,以添加辍学内容:
from torchvision.models import resnet18
model = resnet18(pretrained=True)
model.fc = nn.Sequential(
nn.Dropout(0.5),
nn.Linear(512, 10)
)
model.to(dev)
请注意,几乎从未使用过在befor卷积层上添加滤除。
还要检查this URL。 如您所见,没有人对cifar10的准确性达到100.00。 :)