如何阻止Imagedatagenerator()。flow_from_directory更改加载文件的顺序

时间:2019-11-15 17:18:07

标签: python image-processing keras

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

但是,当我使用以下代码使用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])

enter image description here

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我遇到了同样的问题,我注意到当预测数量小于批次数量时,顺序存在排列。因此,我只是检查并滚动了预测数组。我相信发生这种情况是因为当 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)