在为神经网络训练准备训练集时,我发现了两种可能的方法。
- 传统方法:计算整个训练集的平均值,并在发送到网络之前减去每个图像的固定平均值。以类似的方式处理标准差。
- 我发现tensorflow提供了一个函数
tf.image.per_image_standardization
,可以对单个图像进行归一化。
不知道哪种方式更合适?
最佳答案
这两种方式都是可能的,选择主要取决于您读取数据的方式。
整个训练集当您可以将整个数据集一次性加载到 numpy 数组中时,标准化会很方便。例如,MNIST dataset通常会完全加载到内存中。当各个图像差异很大时,这种方式在收敛方面也是更可取的:两个训练图像,一个主要是白色,另一个主要是黑色,将具有非常不同的均值。
每个图像当图像逐个或小批量加载时(例如从 TFRecord 加载),标准化很方便。当数据集太大而无法容纳在内存中时,这也是唯一可行的选择。在这种情况下,最好组织input pipeline in tensorflow并像图中的其他张量一样变换图像张量。我在 CIFAR-10 中看到这种标准化的准确性非常高,因此尽管存在前面提到的问题,但这是一种可行的方法。另请注意,您可以通过 batch normalization 减少负面影响.
关于python - 哪种是进行图像标准化的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47865695/