Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras ImageDatagenerator:流量函数参数不一致_Python_Keras_Deep Learning_Data Augmentation - Fatal编程技术网

Python Keras ImageDatagenerator:流量函数参数不一致

Python Keras ImageDatagenerator:流量函数参数不一致,python,keras,deep-learning,data-augmentation,Python,Keras,Deep Learning,Data Augmentation,我正在为Keras中的图像增强而挣扎 我定义了一个ImageDataGenerator来修改数据,定义了一个flow函数来将其应用于数据,这一概念(或看起来)对我来说很清楚 但是为什么流函数(flow,flow\u来自\u数据帧,flow\u来自\u目录)彼此不同呢?他们的目的对我来说很清楚:他们使用不同类型的数据源处理数据 我指的是要传递的参数的差异。特别是,我想到了一个不同点:对于流(在这里我增加了已经加载的数据) 我无法说明插值机制。但是我不需要吗?您可以根据您拥有的数据量和组织方式选择适

我正在为Keras中的图像增强而挣扎

我定义了一个ImageDataGenerator来修改数据,定义了一个flow函数来将其应用于数据,这一概念(或看起来)对我来说很清楚

但是为什么流函数(
flow
flow\u来自\u数据帧
flow\u来自\u目录
)彼此不同呢?他们的目的对我来说很清楚:他们使用不同类型的数据源处理数据

我指的是要传递的参数的差异。特别是,我想到了一个不同点:对于流(在这里我增加了已经加载的数据)


我无法说明插值机制。但是我不需要吗?

您可以根据您拥有的数据量和组织方式选择适当的流函数

flow()
用于可在内存中完全管理的小型数据集

flow\u from\u directory()
将使用每个子目录的名称作为标签,从父目录中的子目录中读取文件。如果您有大量按目录组织的数据,则此选择很好。如果您有一组具有不同功能的公共文件需要培训,这可能会成为一个挑战,因为您需要将数据的冗余副本存储在不同的子目录中(或者至少创建充满指向实际文件存储的符号链接的目录)

flow\u from\u dataframe()
将读取数据框指定的文件和标签。此功能是最近添加的功能,是最灵活的选择,因为您可以使用您喜欢的任何目录结构存储文件的单个副本,并且可以从存储为csv文件、数据库或Panda支持的任何其他方法的元数据生成数据框

流通常与

其中,增强管道通常基于ImageDataGeneration对象,该对象的参数为
fill\u 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)

谢谢你所有的帖子和评论。不幸的是,没有一个帖子的答案完全适用于我的问题。我做了一些研究,浏览了所有的Keras代码,找到了一个我现在可以使用的答案

我想,Keras文档有点误导了我。我误解了
flow\u from\u directory()
flow\u from\u directory()
方法的参数
interpolation
。在思想上,这也用于放大图像。在文件中应更清楚地说明这一点

首先,卡尔的观点是正确的。这些函数中的每一个都更适合于一定数量的数据以及从何处获取数据的源。这里是插值,它只应用于加载的图像。对于使用
flow
功能处理的图像,假定这些图像已经具有所需的图像大小。因此,必须事先做好


fill_mode
参数也不适用于插值,因为这只是为了执行仿射变换而在实际图像周围设置虚拟像素

区别在于数据来自何处。它们之间的主要区别在于您要生成的数据生命周期:
flow
对于内存中的numpy数组,
flow\u from\u directory
对于图像目录等。不一致性的确切含义是什么?@sdcbr:谢谢,需要通过编辑来澄清这一点