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

我对Keras/Tensorflow领域还比较新手,目前正在通过使用现有的Keras教程模型并尝试修改它们来学习。我选择了图像分类任务,因为如果我能掌握整个流程,这就是我最终需要的应用;)

情况: 我收集了20,000张室内和室外的公寓和房屋图片,以便将它们分类为室内/室外图片。我逐步修改使用的模型目前准确率为95.2%,但我想尝试达到更高的准确率。

问题: 在我的电脑上,运行50个epoch的训练和测试,批量大小为128,图片尺寸为256×256,大约需要24小时。这意味着,检查模型修改是否能合理改善结果需要花费无尽的时间。

例如,降低批量大小、使用更小的图片或减少epoch数会导致模型准确率降低。减少epoch对测试运行和完整运行之间的差异影响较小,但最终,如果模型需要12小时或24小时来训练,如果我想检查修改是否有积极效果,这并不重要。

我的问题: 你如何检查对模型的更改是否倾向于提高准确率?使用仅几张图片的测试运行?将epoch数减少到非常低的数字?我测试了一些方法,但每次在图片数量、图片分辨率、epoch等方面降低复杂度时,“测试运行”大多数时候并不能指示完整运行的最终准确率。例如,测试运行表现较差而完整运行表现更好,反之亦然。

有什么建议吗?将不胜感激!


回答:

最简单的答案可能是购买并安装一个GPU。价格已经下降了,所以你可以用不太多的成本获得更短的训练时间。然而,考虑到你的现状,使用两个Keras回调函数可能会有助于减少训练时间。第一个是ReduceLROnPlateau。文档在这里。这个回调可以设置为监控验证损失。如果验证损失在’patience’个epoch内未能降低,学习率将按“factor”因子降低,其中因子是一个小于1的数字。使用这个回调,应该可以从更高的学习率开始,并在早期epoch中更快地收敛,然后根据需要自动降低学习率。第二个回调是EarlyStopping。文档在这里。它可以设置为监控验证损失,并在损失在’patience’个epoch内未能改善时终止训练。这将防止你运行不会进一步改善性能的epoch。在回调中使用参数restore_best_weights=True,在训练结束时,你的模型将具有验证损失最低的那个epoch的权重。我推荐的回调设置如下所示

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中包含callbacks=callbacks

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注