小编典典

预测期间,数据标准化如何在keras中起作用?

python

我看到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)

我的问题是,如果我在训练期间指定了数据归一化,预测将如何工作?我看不到如何在框架中传递训练集均值/标准差的知识来预测如何使我自己对测试数据进行标准化,但是我也看不到训练代码中的这些信息存储。

归一化所需的图像统计信息是否存储在模型中,以便可以在预测期间使用?


阅读 209

收藏
2021-01-20

共1个答案

小编典典

是的-这是一个很大的缺点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中适当的字段(例如和)获取方法来恢复meanstd计算fit方法。datagen.mean``datagen.std

2021-01-20