Tensorflow 使用ImageDataGenerator时不了解规范化
我正在尝试使用Keras和Tensorflow作为后端构建一个简单的图像分类器。然而,我很难理解在喀拉斯是如何实现正常化的 我的理解是,在机器学习中,计算训练+验证集的平均值和标准差,然后在标准化测试集和对新数据进行预测时重用平均值和标准差。因此,考虑到这一点,我将解释我在Keras的每个部分中不理解的内容Tensorflow 使用ImageDataGenerator时不了解规范化,tensorflow,keras,Tensorflow,Keras,我正在尝试使用Keras和Tensorflow作为后端构建一个简单的图像分类器。然而,我很难理解在喀拉斯是如何实现正常化的 我的理解是,在机器学习中,计算训练+验证集的平均值和标准差,然后在标准化测试集和对新数据进行预测时重用平均值和标准差。因此,考虑到这一点,我将解释我在Keras的每个部分中不理解的内容 train_datagen = ImageDataGenerator(rescale=1./255, samplewise_center=True, samplewise_std_norma
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
。
在文档中,它说flow
函数规范化了数据,然后我提出了与此相关的三个问题:
samplewise\u std\u归一化
和samplewise\u center
的效果如何evaluate
时,我有一个问题:
predict
时,我有一个问题:
scikit-learn
的转换器也可以这样做(实际上,他们的标准缩放器以类似的方式工作)
Keras如何对运行时生成的augmentad数据进行规范化,以便在开始之前不知道平均值和std
它可以进行batchtwise规范化
可以说,这不是标准化数据的正确方法。正确的方法是根据列车组进行标准化。
这意味着您应该首先在列车数据上安装生成器,然后才使用flow
方法
这实际上是在ImageDataGenerator
中烘焙的-如果您指定samplewise\u std\u normalization
并且在尝试标准化批处理时不适合您的生成器Keras
评估和预测:
这些是模型的方法。他们只是在输入数据上运行模型,所以他们不做任何标准化-您应该向他们提供之前标准化过的数据。+1用于涵盖批量标准化(这可以减少辍学的需要,并导致更快的网络培训)。我要补充的是,在0-1范围内表示像素值(正常范围0-255)是正常的。因此,当您运行测试数据时,不需要对mean和std-dev(白化)执行任何操作,但需要确保像素值介于0和1之间。我认为使用像素范围0-1有助于减少网络中所需的权重,并有助于网络收敛。但问题仍然是,我不需要对训练集的平均值和标准进行归一化测试集吗?是的,你应该这样做。我据此编辑了答案