【问题标题】:Which is the correct way to do image normalization?哪种是进行图像标准化的正确方法?
【发布时间】:2017-12-18 09:47:17
【问题描述】:
在为神经网络训练准备训练集时,我找到了两种可能的方法。
- 传统方法:计算整个训练集的平均值,然后在发送到网络之前减去每张图像的固定平均值。以类似的方式处理标准差。
- 我发现 tensorflow 提供了一个函数
tf.image.per_image_standardization 对单个图像进行归一化。
不知哪种方式更合适?
【问题讨论】:
标签:
python
tensorflow
neural-network
deep-learning
data-science
【解决方案1】:
这两种方式都是可能的,选择主要取决于您读取数据的方式。
整个训练集当您可以一次将整个数据集加载到 numpy 数组中时,标准化很方便。例如,MNIST dataset 通常完全加载到内存中。这种方式在收敛性方面也更可取,当单个图像差异很大时:两张训练图像,一张主要是白色,另一张主要是黑色,将具有非常不同的手段。
每张图片在一张一张或小批量加载图像时,例如从 TFRecord 加载,标准化很方便。当数据集太大而无法放入内存时,它也是唯一可行的选择。在这种情况下,最好将input pipeline in tensorflow 组织起来,并像图中的其他张量一样变换图像张量。我在 CIFAR-10 中看到了这种归一化的相当好的准确性,所以这是一种可行的方法,尽管前面提到了一些问题。另请注意,您可以通过batch normalization 减少负面影响。