我已经了解了使用tf.keras.utils.normalize(x_train, axis=0)
和tf.keras.utils.normalize(x_train, axis=1)
进行归一化在数学上的含义->如果我们的列是要素而行是数据样本,则使用axis=0
意味着对每个要素进行归一化所有样本的特征。
现在,当我们看到尺寸为28 * 28的图像时,归一化轴依赖什么?每个图像都是一个数据样本,所以我在哪个轴上对与单个图像相对应的像素值进行归一化感到困惑。在几乎每个教程和示例中,都使用axis=1
并对所有图像进行归一化。
除了数学运算外,我还想了解选择轴的原因。
答案 0 :(得分:2)
基于通道的规范化可能会使图像的视觉表现变得混乱,并且总是很难进行健全性检查。
问题1:现在,当我们看到尺寸为28 * 28的图像时,归一化轴取决于什么?
如果您具有 28 * 28 * 1 (假设有1个通道),则可以根据数据集中其图像的排列对其进行规范化。通常,此处使用的值为1
,因为图像通常是堆叠而不是串联的。
[Image 0] Compared to [Image 0][Image 1][Image 2][Image ...]
[Image 1]
[Image 2]
[Image ...]
意味着您可以像这样引用它:
Image[0] = (28*28*1) // 28*28 is the number of Columns per Row (Image)
Image[1] = (28*28*1)
问题2:每个图像都是一个数据样本,所以我困惑于在哪个轴上对与单个图像相对应的像素值进行归一化。在几乎每个教程和示例中,都采用axis = 1,并且对所有图像都进行了归一化。
规范化数据意味着两件事:
Scaling is commonly 0 to 1, -1 to 1, and -1 to 1 with 0 mean.
正如我在问题1的答案中指出的那样,值轴= 1是由于图像被堆叠。
Image[0][28*28_pixels]
Image[1][28*28_pixels]
Image[...][28*28_pixels]
因此,当您在axis = 1 (columns)
中进行归一化时,考虑到像素位置pixel 1 is compared to pixel 1 of all the images
中的所有值,就可以得到正确的缩放比例,这是在 WHOLE上完成的数据集,因此整个数据到特定点的归一化平衡。