“将其重塑为网络期望的形状并对其进行缩放以使所有值都在 [0, 1] 区间内”的目的是什么?

人工智能 神经网络 机器学习 深度学习 卷积神经网络
2021-11-06 13:56:52

我是一个深度学习初学者,最近在看这本书《Deep learning with Python》,例子解释了在keras中使用MNIST实现灰度图像分类的过程,在编译步骤中,它说,

在训练之前,我们将通过将数据重塑为网络期望的形状并对其进行缩放来预处理数据,以便所有值都在 [0, 1] 区间内。例如,以前,我们的训练图像存储在 uint8 类型的形状 (60000, 28, 28) 数组中,其值在 [0, 255] 区间内。我们将其转换为一个形状为 (60000, 28 * 28) 的 float32 数组,其值介于 0 和 1 之间。

图像存储在 uint8 类型的形状 (60000, 28, 28) 数组中,值在 [0, 255] 区间内。据我了解,这些值在每个像素的 0-255 之间,并存储为 3D 矩阵。有人可以解释为什么需要通过缩放它来将其“转换”为网络期望,并使其“所有值都在 [0, 1] 区间内。”?

如果我没有正确解释某些部分,也请提出建议。

2个回答

重新调整梯度下降问题的目的是重新构建问题,以便更快地收敛/计算线性系数参数。斯坦福视频系列中,Andrew Ng 提供了直观的解释,使人们能够磨练直观的理解。

当输入处于相同数量级时,多元输入回归梯度下降收敛得更快。例如,如果根据 X1 = 房间数和 X2 = 房屋面积(以平方英尺为单位)来预测房价。X1 的规模为 0-6 间卧室,X2 通常为 1000-3000 平方英尺。考虑到幅度上的差异,这个问题是特征缩放的一个很好的候选。

这很容易,但被误解了。他们的意思是将它从0-255的范围映射到0-1的范围。这意味着 0 将是 0,而 255 将是 1。此代码在 javascript 中是这样的:

function map (num, in_min, in_max, out_min, out_max) {
  return (num - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

使用该函数,如下所示:

var num = 5;
console.log(map(num, 0, 255, 0, 1)); // 0.0196078431372549
var num = 150
console.log(map(num, 0, 255, 0, 1)); // 0.5882352941176471

遍历整个图像,并在每个鸡蛋或每个像素上使用该函数(或等效的编程语言)。通过这样做,所有值都在 0,1 区间内。接下来,您所要做的就是将其馈送到网络。