当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《KerasflowFromDirectory在生成文件名时获取文件名》经验,为你挑选了1个好方法。

是否可以获取使用加载的文件名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并传递它而不是a.x变量的排序和我得到的文件名列表也是必须的.



1> Picard..:

是的,至少在版本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])

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


需要注意的是,如果shuffle为True(默认),则不起作用.您将始终按照它们首次处理的顺序获取文件名,而不是按照它们从生成器返回的顺序.
@AlexGuth使用`shuffle = True`时应该怎么做?
推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有