【问题标题】:How to stop Imagedatagenerator().flow_from_directory from changing the order of loaded files如何阻止 Imagedatagenerator().flow_from_directory 更改加载文件的顺序
【发布时间】:2020-03-11 21:22:11
【问题描述】:

我的文件夹中的测试图像按以下顺序排列 -

但是当我使用 ImageDataGenerator().flow_from_directory() 使用以下代码加载图像文件时,文件以不同的顺序加载,如图所示 -

test_batches = ImageDataGenerator().flow_from_directory(test_path, target_size=(128,128), classes= 
                                                         ['test'], batch_size=1, shuffle=False, 
                                                         class_mode=None, seed=42)

i=0
for i in range (0, len(test_batches)):
    print(test_batches.filenames[i])

如何维护代码中图像文件的顺序,因为我需要创建一个输出 .csv 文件,该文件的文件名及其预测的类标签的顺序与测试文件夹中的顺序相同?

【问题讨论】:

    标签: python image-processing keras


    【解决方案1】:

    shuffle=False 添加到flow_from_directory 调用中。请注意,如果您在训练时使用它可能会产生不利影响,但不应影响验证/测试。

    【讨论】:

    • 我已经将它添加到上面的代码中的 flowfromdirectory() 调用中,但它似乎仍然改变了文件的顺序..
    • @psj 它将按字母数字顺序对文件进行排序,这是大多数事情应该排序的顺序。文件夹没有固有的顺序,因此您在 Windows 资源管理器中看到的非标准顺序将对您编写的任何代码都没有影响。
    【解决方案2】:

    我遇到了同样的问题,我注意到当预测数小于批次数时,顺序会发生排列。因此,我只是检查并滚动了预测数组。我相信会发生这种情况,因为初始化 ImageDataGenerator 时它会调用一个批次(不完全是调用),但是如果您将 tf.print 添加到 getitem,它将被调用批次数次。也许当有很多预测项时它记得要重置,但是使用 gen.reset() 没有帮助,所以我不确定。

    简而言之,这个功能为我解决了问题:

    def fix_prediction_order(prediction):
        if len(prediction) <= BATCH_SIZE:
            return prediction
    
        return np.roll(prediction, BATCH_SIZE, axis = 0)
    

    【讨论】:

      猜你喜欢
      • 2021-07-01
      • 2019-11-20
      • 2012-05-28
      • 2017-09-05
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多