我是Keras/Tensorflow领域的新手,目前正在尝试使用Keras的现有教程模型进行学习,然后尝试对其进行修改。我选择了一个图像分类任务,因为这是我需要它的原因,如果我能走得足够远,能够处理所有的事情;)
情况:我收集了20k套公寓和房屋的室内外照片,将它们分类为室内/室外照片。我使用并逐步修改的模型现在的精度为95.2%,但我想尝试达到更高的精度
问题:在我的电脑上,大约需要24小时来运行50个带有培训和测试的时代,批量大小为128个,图片为256x256。这意味着,需要无休止地检查对模型的修改是否会导致结果的合理改进
例如,较小的批量、较小的图片或较少的时间段会导致模型的准确性较低。缩短时间对试运行和完整运行之间的差异影响较小,但最终,如果模型需要12或24小时的训练,如果我想检查,如果修改确实有积极的影响,这并没有什么区别
我的问题:如何检查对模型的更改是否会导致更高的准确性?只需要几张图片就可以进行测试?将历代时间减少到一个非常低的数字?我测试了一些方法,但每次都会降低图片数量、图片分辨率、年代等方面的复杂性,“测试运行”在大多数情况下并不表明完整运行的最终准确性。例如,测试运行性能较差,而完整运行性能较好,反之亦然
有什么提示吗?非常感谢
最简单的答案可能是购买并安装一个GPU。价格已经下降,所以你可以在不花太多钱的情况下获得更短的训练时间。然而,考虑到您的实际情况,使用两个Keras回调函数可能有助于减少培训时间。第一个是高原。文档是here.可以设置此回调来监视验证丢失。如果验证损失在“耐心”次数的历次中未能减少,则学习率将减少因子“因子”,其中因子小于1。通过这种回调,应该可以从更高的学习率开始,并在早期更快地收敛,然后根据需要自动降低学习率。第二个回调是earlystoping。文档是here.可以设置它来监控验证丢失,如果丢失未能改善“耐心”次数,则终止培训。这将阻止您运行不会进一步提高性能的历元。在参数restore_best_weights=True的回调中,在训练结束时,您的模型将具有验证损失最低的历元的权重。我建议的回调设置如下所示
然后在model.fit中包含回调=回调
你是唯一能回答这个问题的人。让我看看能否解释我的答案。你有两个因素需要考虑。模型的复杂性和图片的多样性是相辅相成的。通常不需要在所有数据上训练模型,因为存在一定程度的“重复”。这就是随机梯度下降法工作的基本原因。 您可以尝试通过执行以下操作来找到最佳数据集大小
如果您注意到准确性没有增加,可能是因为您达到了模型的“最佳数据集大小”,或者您的模型无法再学习
在这一点上,您可以开始降低模型的复杂性、纪元数等,然后再次绘制精度。如果这一点没有减少,那么您的模型能够学习,但从您的图像中没有更多的东西可以学习
只是个主意
相关问题 更多 >
编程相关推荐