【问题标题】:How to get associated image name when using predict_generator() in keras在 keras 中使用 predict_generator() 时如何获取关联的图像名称
【发布时间】:2020-04-30 22:44:02
【问题描述】:
test_batches = ImageDataGenerator(
    preprocessing_function=preprocess_input
).flow_from_directory(test_path,target_size=(224,224),batch_size=1,class_mode=None,shuffle = "false")
prediction = model.predict_generator(test_batches, steps=1, verbose=1)
np.argmax(prediction)

所以我在这里使用 step_size=1 和 steps=1 来测试一张图片。每当我运行它时,我都会得到不同的预测,这意味着它不会每次都选择相同的图像。如何查看图片名称?

编辑:这是解释我面临的问题的另一种尝试:

test_batches = ImageDataGenerator(
    preprocessing_function=preprocess_input
).flow_from_directory(test_path,target_size=(224,224),batch_size=2,class_mode=None,shuffle = "false")
prediction = model.predict_generator(test_batches, steps=1, verbose=2)

预测变量有两个预测概率数组。我如何知道这些预测是针对哪些图像?

【问题讨论】:

标签: python machine-learning neural-network deep-learning keras


【解决方案1】:
  • 如果您的目标是熟悉 keras ImageDataGenerators:

如果您希望您的生成器始终返回相同的图像(为了重现性):

from keras.preprocessing.image import ImageDataGenerator
import numpy as np

data_dir = 'path/to/image/directory'  # path to the directory where the images are stored
index = 0  # select a number here

ig = ImageDataGenerator()
gen = ig.flow_from_directory(data_dir, batch_size=1)  # if you want batch_size > 1 you need to
                                                      # add as many indices as your batch_size.
image, label = gen._get_batches_of_transformed_samples(np.array([index]))
image_name = gen.filenames[index]
# do whatever you want with your image and label

如果您希望生成器始终返回随机图像,但知道它是哪一张,我建议您执行以下操作:

index = next(gen.index_generator)
image, label = gen._get_batches_of_transformed_samples(index)
image_name = gen.filenames[index]
  • 如果您想了解predict_generator 的工作原理,但是这些方法都无法帮助您。我唯一能想到的就是编辑DirectoryIteratorcode。

例如,您可以添加一行来打印您传递的图像的名称。我建议在line 1434之后添加以下语句:

print(fname)

【讨论】:

  • 老实说,我想使用 predict_generator(),我只是想知道它用于预测的图像。 predict_generator() 只返回预测。我想在文件名和预测之间建立关联。我很确定我错过了一些非常基本的东西。
  • 很遗憾,如果您想使用predict_generator(),我认为没有比更改我告诉您的线路更简单的方法了。
  • 谢谢您,我设法理解了您上面的解释。我可以在不使用 predict_generator 的情况下建立关联(我认为没有更简单的方法)。
【解决方案2】:

你可以使用 generator.filename 属性

image_name=test_batch.filenames[0]

【讨论】:

  • 这不起作用,它只会给出生成器文件名列表中的第一张图片,而不是它返回的第一张图片。
猜你喜欢
  • 2019-02-15
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 2018-10-21
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多