基于试运行的Keras Tensoflow模型优化是否可行?

2024-04-28 08:03:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Keras/Tensorflow领域的新手,目前正在尝试使用Keras的现有教程模型进行学习,然后尝试对其进行修改。我选择了一个图像分类任务,因为这是我需要它的原因,如果我能走得足够远,能够处理所有的事情;)

情况:我收集了20k套公寓和房屋的室内外照片,将它们分类为室内/室外照片。我使用并逐步修改的模型现在的精度为95.2%,但我想尝试达到更高的精度

问题:在我的电脑上,大约需要24小时来运行50个带有培训和测试的时代,批量大小为128个,图片为256x256。这意味着,需要无休止地检查对模型的修改是否会导致结果的合理改进

例如,较小的批量、较小的图片或较少的时间段会导致模型的准确性较低。缩短时间对试运行和完整运行之间的差异影响较小,但最终,如果模型需要12或24小时的训练,如果我想检查,如果修改确实有积极的影响,这并没有什么区别

我的问题:如何检查对模型的更改是否会导致更高的准确性?只需要几张图片就可以进行测试?将历代时间减少到一个非常低的数字?我测试了一些方法,但每次都会降低图片数量、图片分辨率、年代等方面的复杂性,“测试运行”在大多数情况下并不表明完整运行的最终准确性。例如,测试运行性能较差,而完整运行性能较好,反之亦然

有什么提示吗?非常感谢


Tags: 模型tensorflow时间分类情况图片精度批量
2条回答

最简单的答案可能是购买并安装一个GPU。价格已经下降,所以你可以在不花太多钱的情况下获得更短的训练时间。然而,考虑到您的实际情况,使用两个Keras回调函数可能有助于减少培训时间。第一个是高原。文档是here.可以设置此回调来监视验证丢失。如果验证损失在“耐心”次数的历次中未能减少,则学习率将减少因子“因子”,其中因子小于1。通过这种回调,应该可以从更高的学习率开始,并在早期更快地收敛,然后根据需要自动降低学习率。第二个回调是earlystoping。文档是here.可以设置它来监控验证丢失,如果丢失未能改善“耐心”次数,则终止培训。这将阻止您运行不会进一步提高性能的历元。在参数restore_best_weights=True的回调中,在训练结束时,您的模型将具有验证损失最低的历元的权重。我建议的回调设置如下所示

rlronp=f.keras.callbacks.ReduceLROnPlateau(monitor="val_loss", factor=0.5, patience=1)
    

estop=tf.keras.callbacks.EarlyStopping(monitor="val_loss",patience=3,restore_best_weights=True)
callbacks=[rlronp, estop]

然后在model.fit中包含回调=回调

你是唯一能回答这个问题的人。让我看看能否解释我的答案。你有两个因素需要考虑。模型的复杂性和图片的多样性是相辅相成的。通常不需要在所有数据上训练模型,因为存在一定程度的“重复”。这就是随机梯度下降法工作的基本原因。 您可以尝试通过执行以下操作来找到最佳数据集大小

  1. 选择随机数目的图像(比如说,500)
  2. 为我们的模型、时代等选择配置
  3. 训练您的模型并记录准确性
  4. 将图像数量增加10%,并重复步骤1-4几次
  5. 绘制模型的准确度

如果您注意到准确性没有增加,可能是因为您达到了模型的“最佳数据集大小”,或者您的模型无法再学习

在这一点上,您可以开始降低模型的复杂性、纪元数等,然后再次绘制精度。如果这一点没有减少,那么您的模型能够学习,但从您的图像中没有更多的东西可以学习

只是个主意

相关问题 更多 >