在张量流中沿任意轴标准化意味着什么?

use*_*142 5 python tensorflow

我已经理解归一化 using tf.keras.utils.normalize(x_train, axis=0)和 的tf.keras.utils.normalize(x_train, axis=1)数学含义 -> 如果我们的列是特征,行是数据样本,则使用axis=0意味着对所有样本中该特征的总和的每个特征进行归一化。现在,当我们有一个尺寸为 28*28 的图像时,归一化轴取决于什么?每个图像都是一个数据样本,因此我很困惑在哪个轴上标准化与单个图像对应的像素值。在几乎每个教程和示例中,axis=1都会对所有图像一起进行标准化。

除了数学运算之外,我也很想了解轴选择背后的推理。

TF_*_*ort 5

通道标准化可能会扰乱图像的视觉表示,并且总是更难进行健全性检查。

问题 1: 现在当我们有一张尺寸为 28*28 的图像时,归一化轴取决于什么?

如果您有28*28*1(假设有 1 个通道),您可以根据该图像在数据集中的排列来标准化该图像。这里通常使用的值是1,因为图像通常是堆叠的而不是串联的

[Image 0]     Compared to [Image 0][Image 1][Image 2][Image ...]
[Image 1]
[Image 2]
[Image ...]
Run Code Online (Sandbox Code Playgroud)

这意味着您可以像这样引用它:

Image[0] = (28*28*1) // 28*28 is the number of Columns per Row (Image)
Image[1] = (28*28*1) 
Run Code Online (Sandbox Code Playgroud)

问题2: 每张图像都是一个数据样本,所以我很困惑在什么轴上对单个图像对应的像素值进行归一化。在几乎每个教程和示例中,都采用 axis=1 并对所有图像一起进行归一化。

标准化数据意味着两件事:

  1. 将数据放在相同的尺度上(缩放)可以提高收敛速度和精度。
Scaling is commonly 0 to 1, -1 to 1, and -1 to 1 with 0 mean. 
Run Code Online (Sandbox Code Playgroud)
  1. 围绕一个点(居中)平衡数据,以防止梯度爆炸和消失,并提高收敛性和准确性。

正如我在问题 1 的答案中指出的,值轴 = 1 是由于图像被堆叠所致。

Image[0][28*28_pixels]
Image[1][28*28_pixels]
Image[...][28*28_pixels]
Run Code Online (Sandbox Code Playgroud)

因此,当您进行归一化时,考虑到像素位置中的所有值,axis = 1 (columns)您可以获得正确的比例pixel 1 is compared to pixel 1 of all the images,这是在整个数据集上完成的,因此归一化在整个数据中平​​衡到某个点