Deep learning 为什么CIFAR10数据集上的resnet110 I列车仅获得77%的测试acc

Deep learning 为什么CIFAR10数据集上的resnet110 I列车仅获得77%的测试acc,deep-learning,pytorch,resnet,Deep Learning,Pytorch,Resnet,我在CIFAR10数据集上对Resnet110进行了训练,在训练中我获得了100%的acc,但在测试数据集上只有77.85%。问题可能是什么? 否则,我使用Pytork框架。 非常感谢 ------------------------------------------------------------------------ Train Epoch: 200 [0/50000 (0%)] Loss: 0.000811, Accuracy: 100.00 Train Epoch: 20

我在CIFAR10数据集上对Resnet110进行了训练,在训练中我获得了100%的acc,但在测试数据集上只有77.85%。问题可能是什么? 否则,我使用Pytork框架。 非常感谢

    ------------------------------------------------------------------------
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%

你太过分了,这是显而易见的。消除过度拟合的最佳方法是对更多数据进行训练

为此,您可以使用此命令进行数据扩充

对于cifar10,您可以使用特殊的resnet体系结构,它可以使您获得高达93%的准确率。该精度通过数据扩充实现

使神经网络正则化(减少过拟合)的其他技术包括:

  • 辍学
  • 早停
以下是我如何更改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)
注:在卷积层之前添加辍学几乎从未使用过

也检查一下。
如您所见,没有人在cifar10上达到100.00的准确度

ResNet-101
对于CIFAR10来说肯定太大了,使用较小的版本,从
torchvision
应该可以

此外,您还可以使用超级收敛(例如,将学习速率设置为
5
3
),参见或其他相关信息,对这些人进行快速培训。我想,你可以在18个世纪左右的时间里做到这一点。此外,如此高的学习率起到了调节作用,因为它只会收敛到真正平坦的极小区域


为了避免过度贴合,请使用真正强大的图像增强、旋转、翻转、剪切,或者混搭。您可以在第三方库中找到它们。

您可能有培训集。基本上,您的ResNet已经记住了训练集,但是它在样本外数据(例如,您的测试集)上的性能越来越差。通常,这就是为什么人们会在培训期间使用验证集来监控样本外的性能,并在过度拟合发生之前停止培训。非常感谢您的回答。这可能是因为过度拟合的问题。“我将测试新的超参数。”JoshVarty说,“我想他使用了。你的扩充非常聪明。哦,是的,谢谢你指出这一点,可能是这样的,如果是这样的话,你可以忽略我文章开头关于太大的
ResNet
。谢谢你的建议。我只是添加了一些数据扩充方法,修改了学习率和权重衰减率。现在的结果是93%。我想最重要的因素是学习率和体重衰减率。谢谢你的评论。我担心我的GPU内存无法支持如此大的批量。哈哈。我认为主要原因是我没有设置正确的初始学习率和权重衰减率。是的,我只是想坦率地证明6.43%的错误率或合理的错误率。谢谢