首页 > 解决方案 > 通过除以 255 来规范化图像是否会在训练集和测试集之间泄漏信息?

问题描述

我已经看到在 CNN 在线教程中多次使用除以 255 作为归一化,这是在训练测试拆分之前在整个数据集上完成的。

我的印象是测试集应该根据训练集的均值/标准/最大值等进行归一化。通过在整个数据集中使用 /255,显然我们让训练集对测试集有一种感觉。真的吗?

这里的正确方法是什么?

这个:

x_train = (x_train - x_train_mean)/x_train_std
x_test = (x_test - x_test_mean)/x_test_std

或这个:

x_train = (x_train - x_train_mean)/x_train_std
x_test = (x_test - x_train_mean)/x_train_std

或这个:

data/255

谢谢

我被要求提供我所尝试的背景:这似乎是无法搜索的,我还没有找到任何关于它的讨论。

编辑:只是另一个想法。

因为训练集和测试集已经处于相同的比例(即每个像素从 0-255)我假设除以 255 没有区别,现在它们处于相同的比例,但是从 0-1。

标签: imagekerasneural-networkconv-neural-network

解决方案


您的猜测是正确的,将图像除以 255 只是将图像从 0-255 重新缩放到 0-1。(将它从 int 转换为 float 也方便计算)但是,两者都不是必需的。然而,当将数据归零时,平均值不能泄漏到测试集中:( http://cs231n.github.io/neural-networks-2/#datapre )

x_train = (x_train - x_train_mean)

x_test = (x_test - x_train_mean)

此外,您可以使用 sklearn 的 Pipeline 类 ( https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html ) 并使用 fit() 和/或 fit_transform() 方法来简化流程。如果您使用的是 Keras,则有一个包装器


推荐阅读