使用ImageDataGenerator时不了解规范化

时间:2018-03-03 10:34:54

标签: tensorflow keras

我尝试使用带有Tensorflow的Keras作为后端来构建一个简单的图像分类器。然而,我很难理解在Keras中如何进行正规化。

据我所知,在机器学习中,您可以计算训练+验证集的均值和标准,然后在对测试集进行标准化时以及对新数据进行预测时重用均值和标准。因此,请记住我将解释我在Keras的每个部分都不理解的内容。

train_datagen = ImageDataGenerator(rescale=1./255, samplewise_center=True, samplewise_std_normalization=True, shear_range=0.2, zoom_range=0.2)
test_datagen = ImageDataGenerator(rescale=1./255, samplewise_center=True, samplewise_std_normalization=True)
batch_size = 1024
train_generator = train_datagen.flow(X_train, one_hot_train_labels, batch_size=batch_size, shuffle=True)
validation_generator = test_datagen.flow(X_valid, one_hot_valid_labels, batch_size=batch_size)

关于ImageDataGenerator的第一个问题。 在documentation中它表示flow函数规范化数据,然后我就此提出树问题:

  1. samplewise_std_normalizationsamplewise_center如果是进行规范化的流函数会有什么影响?
  2. 如果我也进行规范化,为什么要使用rescale?
  3. Keras如何对运行时生成的augmentad数据进行规范化,以便在启动之前不知道mean和std?

    result = model.evaluate(X_test,one_hot_test_labels)

  4. 当我们运行evaluate时,我有一个问题:

    1. 这里如何处理规范化?我没有访问均值和标准,所以我不能将它们也应用到测试集中?

      predict_softmaxs = model.predict(np.array(resized_images))

    2. 当我运行predict时,我有一个问题:

      1. 我再次无法访问均值和标准,所以我无法将其应用于预测图像?

1 个答案:

答案 0 :(得分:3)

  
      
  1. samplewise_std_normalization和samplewise_center的作用是什么?如果它是执行   归一化?
  2.   

在运行变换器之前定义变换器是很常见的做法。例如scikit-learn的变形金刚也这样做(实际上他们的StandardScaler以类似的方式工作)

  
      
  1. Keras如何对在运行时生成的augmentad数据进行规范化,以便在启动之前不知道mean和std?
  2.   

它可以进行批量标准化。

可以说,这不是标准化数据的正确方法。正确的方法是根据列车集标准化。 这意味着您应首先fit生成列车数据,然后才使用flow方法。

这实际上是ImageDataGenerator出现的 - 如果你指定samplewise_std_normalization并且不适合你的生成器,那么在尝试标准化批处理时,Keras会 warn you

评估和预测:

这些是模型的方法。他们只是对输入数据运行模型,因此他们不进行任何规范化 - 您应该将之前规范化的数据提供给它们。