您可以通过继承DirectoryIterator
来制作一个非常小的子类来返回image, file_path
元组:
import numpy as np
from keras.preprocessing.image import ImageDataGenerator, DirectoryIterator
class ImageWithNames(DirectoryIterator):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.filenames_np = np.array(self.filepaths)
self.class_mode = None # so that we only get the images back
def _get_batches_of_transformed_samples(self, index_array):
return (super()._get_batches_of_transformed_samples(index_array),
self.filenames_np[index_array])
在初始化中,我添加了一个属性,它是self.filepaths
的numpy版本,以便我们可以轻松地索引到该数组中,以获取每个批次生成的路径。
对基类的唯一其他更改是返回一个元组,该元组是图像批处理super()._get_batches_of_transformed_samples(index_array)
和文件路径self.filenames_np[index_array]
。
这样,您可以使生成器如下所示:
imagegen = ImageDataGenerator()
datagen = ImageWithNames('/data/path', imagegen, target_size=(224,224))
然后检查
next(datagen)
0
是否可以获取使用
flow_from_directory
加载的文件名?我有 :我有一个用于多输出模型的自定义生成器,例如:
目前,我正在为
a
随机数生成一个随机数,但为了进行实际训练,我希望加载一个json
文件,其中包含图像的边界框坐标。为此,我需要获取使用train_generator.next()
方法生成的文件名。我有,我可以加载文件,解析json
,并通过它,而不是a
。x
变量的顺序和我得到的文件名列表也必须相同。