我建立了一个56层残差网络来训练CIFAR-10数据集进行图像分类。尽管它是最先进的网络体系结构,但在进行10次训练时,我的模型测试准确性为79%。
训练数据集的大小为49000,而验证数据集的大小为1000。我训练了20个世代,最小批量大小为128,对模型进行了训练。学习率为1e-3。我使用Xavier初始化和RMProp进行梯度下降。
有关我的实现,请参见此处。 https://github.com/Jiancong/cs231n_2017/blob/master/assignment2/TensorFlow.ipynb
我试图将学习率降低到1e-4,同时测试准确性也下降了。而且我尝试将训练次数增加到15个。准确性提高如下。
我将训练次数增加到50次,测试准确性达到了85%。
增加的训练经验现在似乎行不通。我有什么值得尝试的吗?
答案 0 :(得分:1)
有很多可能的选项供您在此处进行调整;您当前面临的问题通常称为“超参数优化”,它本身就是一个完整的研究领域。
基本上,您希望以一种可能获得最佳结果的方式调整参数。首先,我建议您简单地训练更长的时间(更多的纪元)。 我本人从未接受过CIFAR-10的培训,但是可能会在很晚之后达成共识(尽管我对此表示怀疑)。另外,我建议您按照早期停止的方式实施一些事情。
不是始终使用最新模型,而是使用(即检查点)具有最高验证准确性的模型,希望这是最能泛化不可见数据的模型。即使在您的训练数据上它可能没有完美的分数,它在大多数情况下也会在实践中为您提供更好的服务。
完成整个运行过程(或在验证损失方面没有显着改善)之后,您可以提早取消培训程序。
此外,我不确定您对残差块的内部处理了多少,但是也许您可以在此处尝试调整一些参数,例如卷积大小,每个残差块的卷积,特征数量等。等
确实有很多需要注意的地方,但是我假设您在体系结构方面大多坚持使用ResNet paper。 可悲的是,这还涉及很多运气,因为良好的随机初始化可能会在其他特性相似的情况下产生更好的结果(有关更多详细信息,请参见this paper),因此简单地选择其他随机种子可能会有所帮助...
最后但并非最不重要的一点,我建议您研究一下不同的优化器:通常,默认SGD“效果很好”(尽管它仍然是一个很好的工具,在某些情况下可能效果最好)。添加更高级的指标(例如最简单的指标是momentum),可能会导致更好的收敛性。
大多数深度学习工具为您提供了各种各样的优化器。一个不错的选择是Adam优化器。当然那里有不同的东西,可以在here中找到概述。