预测期间,数据标准化如何在keras中起作用?
我看到imageDataGenerator允许我指定不同样式的数据规范化,例如featurewise_center,samplewise_center等。
从示例中可以看到,如果我指定了这些选项之一,则需要在生成器上调用fit方法,以允许生成器计算统计信息,例如生成器上的均值图像。
(X_train, y_train), (X_test, y_test) = cifar10.load_data()
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_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)
# compute quantities required for featurewise normalization
# (std, mean, and principal components if ZCA whitening is applied)
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),
samples_per_epoch=len(X_train), nb_epoch=nb_epoch)
我的问题是,如果我在训练期间指定了数据归一化,预测将如何工作?我看不到如何在框架中传递训练集均值/标准差的知识来预测如何使我自己对测试数据进行标准化,但是我也看不到训练代码中的这些信息存储。
归一化所需的图像统计信息是否存储在模型中,以便可以在预测期间使用?
-
是的-这是一个很大的缺点
Keras.ImageDataGenerator
,您无法自行提供标准统计信息。但是-有一个简单的方法可以解决这个问题。假设您具有
normalize(x)
标准化图像 批处理的功能 (请记住,生成器提供的不是简单图像,而是图像的数组-具有形状的 批处理
,(nr_of_examples_in_batch, image_dims ..)
您可以使用以下方法使自己的生成器具有标准化功能:def gen_with_norm(gen, normalize): for x, y in gen: yield normalize(x), y
然后,您可以简单地使用
gen_with_norm(datagen.flow, normalize)
而不是datagen.flow
。此外-
您可以通过从datagen中适当的字段(例如和)获取方法来恢复mean
和std
计算fit
方法。datagen.mean``datagen.std