但是,当我使用以下代码使用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文件,其文件名及其预测的类标签的顺序应与测试文件夹中的顺序相同?
答案 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)