例如,考虑在Keras中对Resnet50模型进行微调。For example here:
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包中提供了Resnet50.preprocess_input()。ImageDataGenerator's输入如下所示:
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”或“in”正常化。
发布于 2018-03-19 22:53:58
可以将预处理函数的名称传递给预处理参数。如果您不想要数据增强,则不需要传递任何其他内容。
from keras.applications.resnet50 import preprocess_input
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(preprocessing_function=preprocess_input)您还可以编写自己的自定义预处理函数并将其作为参数传递。确保自定义函数的参数和返回值是numpy数组。
https://stackoverflow.com/questions/49019929
复制相似问题