Keras图像数据生成器预处理

3

以fine-tuning Keras中的Resnet50模型为例。例如,在这里

from keras.applications.resnet50 import ResNet50
from keras.preprocessing import image
from keras.preprocessing.image import ImageDataGenerator
from keras.applications.resnet50 import preprocess_input, decode_predictions
import numpy as np

model = ResNet50(weights='imagenet')

train_datagen = ImageDataGenerator()
train_generator = train_datagen.flow_from_directory(
     "./data/train",
    target_size=(299, 299),
    batch_size=50,
    class_mode='binary')
model.fit_generator(train_generator, steps_per_epoch=100)

我感到困惑的是为什么ImageDataGenerator没有给出与Resnet50期望相一致的preprocessing_function规范。具体来说,Resnet50.preprocess_input()被提供在ResNet50软件包中。而ImageDataGenerator的输入如下:
keras.preprocessing.image.ImageDataGenerator(featurewise_center=False,
    samplewise_center=False,
    featurewise_std_normalization=False,
    samplewise_std_normalization=False,
    zca_whitening=False,
    zca_epsilon=1e-6,
    rotation_range=0.,
    width_shift_range=0.,
    height_shift_range=0.,
    shear_range=0.,
    zoom_range=0.,
    channel_shift_range=0.,
    fill_mode='nearest',
    cval=0.,
    horizontal_flip=False,
    vertical_flip=False,
    rescale=None,
    preprocessing_function=None,
    data_format=K.image_data_format())

所以我对ImageDataGenerator的正确初始化感到困惑。我可以设置preprocessing_function=resnet50.Resnet50.preprocess_input,但是我不确定其余的ImageDataGenerator参数应该设置什么,因为其中一些是非零的,比如zca。
注意:我不仅对Resnet50感兴趣,而是对所有模型都感兴趣。在Keras中似乎有一些默认值,例如默认为“caffe”或“inception”归一化。
1个回答

1

您可以将预处理函数的名称传递给预处理参数。如果您不想进行数据增强,则不需要传递其他任何内容。

from keras.applications.resnet50 import preprocess_input
from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(preprocessing_function=preprocess_input)

你也可以编写自己的自定义预处理函数,并将其作为参数传递。确保你的自定义函数的参数和返回值是numpy数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接