Keras flowFromDirectory 在生成文件时获取文件名

新手上路,请多包涵

是否可以获取使用 flow_from_directory 加载的文件名?我有 :

 datagen = ImageDataGenerator(
    rotation_range=3,
#     featurewise_std_normalization=True,
    fill_mode='nearest',
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True
)

train_generator = datagen.flow_from_directory(
        path+'/train',
        target_size=(224, 224),
        batch_size=batch_size,)

我的多输出模型有一个自定义生成器,例如:

 a = np.arange(8).reshape(2, 4)
# print(a)

print(train_generator.filenames)

def generate():
    while 1:
        x,y = train_generator.next()
        yield [x] ,[a,y]

节点,目前我正在为 a 生成随机数,但对于真正的训练,我希望加载一个 json 文件,其中包含我的图像的边界框坐标。为此,我需要获取使用 train_generator.next() 方法生成的文件名。之后,我可以加载文件,解析 json 并传递它而不是 ax 变量的顺序和我得到的文件名列表也必须相同。

原文由 harveyslash 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 741
1 个回答

是的,至少对于 2.0.4 版(不知道早期版本)是可能的。

--- 的实例具有 ImageDataGenerator().flow_from_directory(...) filenames 属性,它是按生成器生成它们的顺序排列的所有文件的列表,还有一个属性 batch_index 所以你可以这样做:

 datagen = ImageDataGenerator()
gen = datagen.flow_from_directory(...)

生成器上的每次迭代都可以获得相应的文件名,如下所示:

 for i in gen:
    idx = (gen.batch_index - 1) * gen.batch_size
    print(gen.filenames[idx : idx + gen.batch_size])

这将为您提供当前批次中图像的文件名。

原文由 Picard 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题