SCo*_*ool 5 image neural-network conv-neural-network keras
我已经看到在 CNN 在线教程中多次使用除以 255 作为归一化,这是在训练测试拆分之前在整个数据集上完成的。
我的印象是测试集应该根据训练集的均值/标准/最大值等进行归一化。通过在整个数据集上使用 /255,显然我们让训练集对测试集有了感觉。真的吗?
这里的正确方法是什么?
这个:
x_train = (x_train - x_train_mean)/x_train_std
x_test = (x_test - x_test_mean)/x_test_std
Run Code Online (Sandbox Code Playgroud)
或这个:
x_train = (x_train - x_train_mean)/x_train_std
x_test = (x_test - x_train_mean)/x_train_std
Run Code Online (Sandbox Code Playgroud)
或这个:
data/255
Run Code Online (Sandbox Code Playgroud)
谢谢
我被要求提供我尝试过的背景:这似乎无法搜索,我还没有找到任何关于它的讨论。
编辑:只是另一个想法。
因为训练集和测试集已经在相同的尺度上(即每个像素从 0-255)我假设除以 255 没有区别,现在它们在相同的尺度上,但是从 0-1。
小智 5
您的猜测是正确的,将图像除以 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,则有一个包装器