Keras ImageDataGenarator:流函数参数不一致
Keras ImageDataGenarator: Inconsistency in flow functions parameter
我正在努力解决 Keras 中的图像增强问题。
我定义一个 ImageDataGenerator 来修改数据和一个流函数来将其应用于数据的概念对我来说(或似乎)很清楚。
但为什么流函数(flow
、flow_from_dataframe
、flow_from_directory
)彼此不同?他们的目的对我来说很清楚:他们处理不同类型来源的数据。
我的意思是传递的参数不同。特别是,我想到了一个不同之处:对于流程(我在其中增加已加载的数据)
我无法说明插值机制。但是我不需要一个吗?
您可以根据拥有的数据量以及数据的组织方式来选择合适的流函数。
flow()
适用于您可以在内存中完全管理的小型数据集。
flow_from_directory()
将从父目录中的子目录中读取文件,使用每个子目录的名称作为标签。如果您有大量按目录组织的数据,则此选择很好。如果您有一组具有不同特征集的通用文件要训练,这可能会成为一个挑战,因为您需要将数据的冗余副本存储在不同的子目录中(或者至少创建充满符号链接的目录)那指向你的真实文件存储)。
flow_from_dataframe()
将读取由 pandas DataFrame 指定的文件和标签。此功能是最近添加的,它是最灵活的选择,因为您可以使用您喜欢的任何目录结构存储文件的单个副本,并且您可以从存储为 csv 文件、数据库的元数据生成 DataFrame,或 pandas 支持的任何其他方法。
Flow is usually used together with the ImageDataGenerator class
增强管道通常基于 ImageDataGeneration 对象,该对象具有参数 fill_mode= 'nearest'
- 所以这就是您能够定义插值机制的方式。
在此处查看文档中的工作示例:
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
y_train = np_utils.to_categorical(y_train, num_classes)
y_test = np_utils.to_categorical(y_test, num_classes)
datagen = ImageDataGenerator(
featurewise_center=True,
featurewise_std_normalization=True,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True,
fill_mode= 'nearest')
datagen.fit(x_train)
# fits the model on batches with real-time data augmentation:
model.fit_generator(datagen.flow(x_train, y_train, batch_size=32),
steps_per_epoch=len(x_train) / 32, epochs=epochs)
感谢您的所有帖子和评论。不幸的是,已发布的答案中 none 确实完全适用于我的问题。我做了一些研究并检查了所有 Keras 代码并得出了一个我现在可以使用的答案。
我想,Keras 文档有点误导了我。我误解了 flow_from_directory()
和 flow_from_directory()
方法的参数 interpolation
。以为这也用于放大图像。在文档中,应该更清楚地说明这一点。
首先,卡尔的观点是有道理的。这些功能中的每一个都更适合一定数量的数据以及从哪里获取数据的来源。这里插值进来了,这只适用于加载的图像。对于使用 flow
函数处理的图像,假设这些图像已经具有所需的图像尺寸。因此,必须事先完成。
fill_mode
参数对插值也不起作用,因为这只是设置实际图像周围的虚拟像素,以便进行仿射变换。
我正在努力解决 Keras 中的图像增强问题。
我定义一个 ImageDataGenerator 来修改数据和一个流函数来将其应用于数据的概念对我来说(或似乎)很清楚。
但为什么流函数(flow
、flow_from_dataframe
、flow_from_directory
)彼此不同?他们的目的对我来说很清楚:他们处理不同类型来源的数据。
我的意思是传递的参数不同。特别是,我想到了一个不同之处:对于流程(我在其中增加已加载的数据)
我无法说明插值机制。但是我不需要一个吗?
您可以根据拥有的数据量以及数据的组织方式来选择合适的流函数。
flow()
适用于您可以在内存中完全管理的小型数据集。
flow_from_directory()
将从父目录中的子目录中读取文件,使用每个子目录的名称作为标签。如果您有大量按目录组织的数据,则此选择很好。如果您有一组具有不同特征集的通用文件要训练,这可能会成为一个挑战,因为您需要将数据的冗余副本存储在不同的子目录中(或者至少创建充满符号链接的目录)那指向你的真实文件存储)。
flow_from_dataframe()
将读取由 pandas DataFrame 指定的文件和标签。此功能是最近添加的,它是最灵活的选择,因为您可以使用您喜欢的任何目录结构存储文件的单个副本,并且您可以从存储为 csv 文件、数据库的元数据生成 DataFrame,或 pandas 支持的任何其他方法。
Flow is usually used together with the ImageDataGenerator class
增强管道通常基于 ImageDataGeneration 对象,该对象具有参数 fill_mode= 'nearest'
- 所以这就是您能够定义插值机制的方式。
在此处查看文档中的工作示例:
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
y_train = np_utils.to_categorical(y_train, num_classes)
y_test = np_utils.to_categorical(y_test, num_classes)
datagen = ImageDataGenerator(
featurewise_center=True,
featurewise_std_normalization=True,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True,
fill_mode= 'nearest')
datagen.fit(x_train)
# fits the model on batches with real-time data augmentation:
model.fit_generator(datagen.flow(x_train, y_train, batch_size=32),
steps_per_epoch=len(x_train) / 32, epochs=epochs)
感谢您的所有帖子和评论。不幸的是,已发布的答案中 none 确实完全适用于我的问题。我做了一些研究并检查了所有 Keras 代码并得出了一个我现在可以使用的答案。
我想,Keras 文档有点误导了我。我误解了 flow_from_directory()
和 flow_from_directory()
方法的参数 interpolation
。以为这也用于放大图像。在文档中,应该更清楚地说明这一点。
首先,卡尔的观点是有道理的。这些功能中的每一个都更适合一定数量的数据以及从哪里获取数据的来源。这里插值进来了,这只适用于加载的图像。对于使用 flow
函数处理的图像,假设这些图像已经具有所需的图像尺寸。因此,必须事先完成。
fill_mode
参数对插值也不起作用,因为这只是设置实际图像周围的虚拟像素,以便进行仿射变换。