【问题标题】:keras: how to predict classes in order?keras:如何按顺序预测类?
【发布时间】:2016-06-23 03:38:27
【问题描述】:

我正在尝试预测 keras 中的图像类别(二进制分类)。模型精度很好,但似乎ImageDataGenerator 打乱了输入图像,所以我无法将预测的类与原始图像匹配。

datagen = ImageDataGenerator(rescale=1./255)

generator = datagen.flow_from_directory(
        pred_data_dir,
        target_size=(img_width, img_height),
        batch_size=32,
        class_mode=None,
        shuffle=False,
        save_to_dir='images/aug'.format(feature))

print  model.predict_generator(generator, nb_input)

例如,如果我在pred_data_dir 下有a1.jpga2.jpg、...、a9.jpg,我希望得到一个类似

的数组
[class for a1.jpg, class for a2.jpg, ... class for a9.jpg] 

来自model.predict_generator(),但实际上我得到了类似的东西

[class for a3.jpg, class for a8.jpg, ... class for a2.jpg]

我该如何解决这个问题?

【问题讨论】:

  • 你不应该试图预测这些图像,直接使用你的验证/测试集。
  • 这里的目标不是获得准确度分数,而是预测新数据集的标签。
  • 是的,那么这个问题没有意义,你不需要训练集标签。
  • 无论如何,预测你的原始图像,而不是增强图像。
  • @MatiasValdenegro predict_generator 原始图像的构造是什么?我在这里遇到了同样的问题stackoverflow.com/questions/48475048/…

标签: keras


【解决方案1】:

查看flow_from_directory的源码。就我而言,我不得不重命名所有图像。它们被命名为 1.jpg .. 1000.jpg,但为了有序,它们必须命名为 0001.jpg .. 1000.jpg。排序在这里很重要。

flow_from_directory 使用sorted(os.listdir(directory)),因此排序并不总是直观的。

【讨论】:

    【解决方案2】:

    flow_from_directory() 方法返回一个DirectoryIterator 对象,其中包含一个列出所有文件的filenames 成员。由于该成员用于后续批量生成和迭代,因此您应该能够使用它将文件名与预测匹配。

    对于您的示例,generator.filenames 应该为您提供类似 ['a3.jpg', 'a8.jpg', ..., 'a2.jpg'] 的并行列表。

    【讨论】:

      猜你喜欢
      • 2017-09-15
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 2018-12-24
      • 2020-12-05
      • 2017-08-24
      • 2023-01-17
      • 1970-01-01
      相关资源
      最近更新 更多