Python:Keras模型为相同的数据和相同的模型返回不同的结果

Python:Keras模型为相同的数据和相同的模型返回不同的结果,python,tensorflow,image-processing,keras,image-classification,Python,Tensorflow,Image Processing,Keras,Image Classification,在过去的几个小时里,我一直在尝试制作我的第一个图像分类模型。为此,我使用了教程。当我遵循这些步骤时,我设法达到了教程的结尾 与教程中的代码相比,我所做的唯一区别是: 为了使训练过程更快,我将历次次数从50次改为10次 我从make_model函数中删除了图像增强块(一行代码) 现在,我明白我的问题所在了。最后,当我再次尝试获得相同数据和相同模型的预测结果时,结果是不同的。请看以下简单代码: >>> for i in range(5): ... predictions

在过去的几个小时里,我一直在尝试制作我的第一个图像分类模型。为此,我使用了教程。当我遵循这些步骤时,我设法达到了教程的结尾

与教程中的代码相比,我所做的唯一区别是:

  • 为了使训练过程更快,我将历次次数从50次改为10次
  • 我从
    make_model
    函数中删除了图像增强块(一行代码)
现在,我明白我的问题所在了。最后,当我再次尝试获得相同数据和相同模型的预测结果时,结果是不同的。请看以下简单代码:

>>> for i in range(5):
...     predictions = model.predict(val_ds)
...     predictions_list = [round(pred[0], 3) for pred in predictions]
...     print(predictions_list[:10])
结果是:

[0.937, 0.905, 1.0, 0.094, 0.021, 0.095, 0.07, 0.006, 1.0, 1.0]
[0.905, 1.0, 1.0, 1.0, 1.0, 1.0, 0.122, 1.0, 1.0, 0.0]
[0.996, 0.003, 1.0, 0.887, 1.0, 1.0, 0.798, 1.0, 1.0, 1.0]
[1.0, 1.0, 0.819, 0.999, 1.0, 0.887, 0.087, 1.0, 0.914, 1.0]
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.916, 0.102]

我假设,只有在我重新训练模型的情况下,结果才会不同。但这不是我的情况!我只重新运行
.predict()
方法。所以,我的问题是-你能帮帮我吗,我做错了什么?我遗漏了什么吗?

请用下面的代码试试好吗

>>> val_item = val_ds.take(1)
>>> for i in range(5):
...     predictions = model.predict(val_item)
...     predictions_list = [round(pred[0], 3) for pred in predictions]
...     print(predictions_list[:10])

在代码中,您使用的是不同的项,而不是相同的项。您可以通过手动打印val_ds值来检查它。

问题在于读取数据函数,该函数的
shuffle
参数设置为
True

当我再次重新加载数据并设置如下
shuffle=False
时:

>>> val_ds = tf.keras.preprocessing.image_dataset_from_directory(
...     'PetImages',
...     shuffle=False,
...     validation_split=0.2,
...     subset="validation",
...     seed=1337,
...     image_size=image_size,
...     batch_size=batch_size,
... )
>>> for i in range(5):
...     predictions = model.predict(val_ds)
...     predictions_list = [round(pred[0], 3) for pred in predictions]
...     print(predictions_list[:10])
然后结果看起来和我预期的一样:

[0.998, 0.994, 1.0, 1.0, 0.885, 1.0, 0.998, 1.0, 0.979, 1.0]
[0.998, 0.994, 1.0, 1.0, 0.885, 1.0, 0.998, 1.0, 0.979, 1.0]
[0.998, 0.994, 1.0, 1.0, 0.885, 1.0, 0.998, 1.0, 0.979, 1.0]
[0.998, 0.994, 1.0, 1.0, 0.885, 1.0, 0.998, 1.0, 0.979, 1.0]
[0.998, 0.994, 1.0, 1.0, 0.885, 1.0, 0.998, 1.0, 0.979, 1.0]

您发送的代码再次打印出不同的结果,因此无法工作。当我打印出
val\u ds
时,它返回以下内容:
。另外,当我打印出整个
预测列表时,它有32个项目。但是,由于
val\u item=val\u ds.take(1)
part,我希望只有1个。您需要将
batch\u size=1
设置为仅获取1个项目。您正在处理批处理。请尝试从数据集中选取一个图像,并多次将其提供给您的模型。看看输出是否不同?