我尝试使用带有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
函数规范化数据,然后我就此提出树问题:
samplewise_std_normalization
和samplewise_center
如果是进行规范化的流函数会有什么影响?Keras如何对运行时生成的augmentad数据进行规范化,以便在启动之前不知道mean和std?
result = model.evaluate(X_test,one_hot_test_labels)
当我们运行evaluate
时,我有一个问题:
这里如何处理规范化?我没有访问均值和标准,所以我不能将它们也应用到测试集中?
predict_softmaxs = model.predict(np.array(resized_images))
当我运行predict
时,我有一个问题:
答案 0 :(得分:3)
- samplewise_std_normalization和samplewise_center的作用是什么?如果它是执行 归一化?
醇>
在运行变换器之前定义变换器是很常见的做法。例如scikit-learn
的变形金刚也这样做(实际上他们的StandardScaler
以类似的方式工作)
- Keras如何对在运行时生成的augmentad数据进行规范化,以便在启动之前不知道mean和std?
醇>
它可以进行批量标准化。
可以说,这不是标准化数据的正确方法。正确的方法是根据列车集标准化。
这意味着您应首先fit
生成列车数据,然后才使用flow
方法。
这实际上是ImageDataGenerator
出现的 - 如果你指定samplewise_std_normalization
并且不适合你的生成器,那么在尝试标准化批处理时,Keras会 warn you。
这些是模型的方法。他们只是对输入数据运行模型,因此他们不进行任何规范化 - 您应该将之前规范化的数据提供给它们。