使用Keras和Tensorflow 2.0的predict()方法结果不一致

这是我的第一篇帖子,如果我的问题问得不够清楚,请随时纠正我。

代码片段相关的包:

我使用Keras函数式API训练我的模型。模型通过ModelCheckpoint保存:

ModelCheckpoint('path_save_model', save_best_only=True, monitor='recall', mode='max')

在新的脚本中,我简单地这样导入它:

model = tf.keras.models.load_model('path_save_model')

我为一次预测准备了数据。输入数据是一个3D的numpy数组。(由于我反复使用同一个数组,处理问题应该被排除在外。)每次,我得到不同的预测结果,这让我非常困惑。如果我运行以下代码:

np.testing.assert_allclose(model.predict(3d_np_array), model.predict(3d_np_array))

我得到:

Traceback (most recent call last):File “”, line 1, in File “C:\Users\me.virtualenvs\my_project\lib\site-packages\numpy\testing_private\utils.py”, line 1528, in assert_allcloseassert_array_compare(compare, actual, desired, err_msg=str(err_msg),File “C:\Users\me.virtualenvs\my_project\lib\site-packages\numpy\testing_private\utils.py”, line 842, in assert_array_compareraise AssertionError(msg)AssertionError:Not equal to tolerance rtol=1e-07, atol=0Mismatched elements: 17406 / 17500 (99.5%)Max absolute difference: 0.17088592Max relative difference: 3.6502254

这是一个非常简单的过程,我不知道我的错误可能在哪里。我认为一个训练并导入的模型的预测不应该包含任何随机性。然而,为了确保,我尝试设置所有种子并使用来自Keras文档的代码进行测试。

每次哈希值都相同,但预测结果仍然不同。

我有点希望我只是错过了什么明显的东西。

注意:

np.testing.assert_allclose(model.predict(np.zeros((1,2500,4))),model.predict(np.zeros((1,2500,4))))

导致类似的输出:

Mismatched elements: 17385 / 17500 (99.3%)

已解决

见答案


回答:

我从Keras文档中关于dropout层的描述中得到了错误的印象。实际上,我仍然对它感到困惑。我设置了training=True,因为这句话:

注意,Dropout层仅在training设置为True时应用,这样在推理时不会丢弃任何值。

这里

我完全不再使用”training”参数,希望默认设置将是dropout层的正常使用(在训练时进行dropout,而在测试和预测时不进行dropout)。我希望这是正确的。如果我应该将training设置为False以获得期望的行为,请告诉我。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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