我看到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,您无法自行提供标准统计信息。但是-有一个简单的方法可以解决这个问题。
Keras.ImageDataGenerator
假设您具有normalize(x)标准化图像 批处理的功能 (请记住,生成器提供的不是简单图像,而是图像的数组-具有形状的 批处理 ,(nr_of_examples_in_batch, image_dims ..)您可以使用以下方法使自己的生成器具有标准化功能:
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。
gen_with_norm(datagen.flow, normalize)
datagen.flow
此外- 您可以通过从datagen中适当的字段(例如和)获取方法来恢复mean和std计算fit方法。datagen.mean``datagen.std
mean
std
fit
datagen.mean``datagen.std