Press "Enter" to skip to content

机器学习中的阵列整形、行归一化和Softmax函数

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

在上一个教程中,我们学习了如何编写Sigmoid和Sigmoid梯度函数。在本教程中,我们将学习如何重塑数组、规格化行、广播内容以及Softmax。

 

深度学习中使用的两个常见的NumPy函数是np.shape和np.reshape()。Shape函数用于获得矩阵或向量X的形状(维度)。重塑(…)用于将矩阵或向量重塑到另一个维度。 np.shape np.reshape()

 

例如,在计算机科学中,标准图像由形状(长度、高度、深度)的3D数组表示。但是,当您读取图像作为算法的输入时,会将其转换为形状矢量(Length*Height*Depth,1)。换句话说,您可以将3D数组“展开”或重塑为一维矢量:

因此,我们将实现一个函数,该函数接受形状(长度、高度、深度)的输入,并返回形状向量(长度*高度*深度,1)。例如,如果要将形状(a,b,c)的数组A重塑为形状(a*b,c)的矢量,可以执行以下操作:

 

要实现上述功能,我们只需编写几行简单的代码:

 

为了测试上面的函数,我们将创建一个3x3x2的数组。通常图像为(num_px_x,num_px_y,3),其中3表示RGB值:

 

因此,我们将会收到:

 

[[11]
 [12]
 [13]
 [14]
 [15]
 [16]
 [21]
 [22]
 [23]
 [24]
 [25]
 [26]
 [31]
 [32]
 [33]
 [34]
 [35]
 [36]]
(3, 3, 2)
(18, 1)

 

如您所见,图像的形状是(3,3,2),在我们调用函数之后,它被重塑为一维形状数组(18,1)。

 

规格化行:

 

机器学习和深度学习中使用的另一种常用技术是将我们的数据标准化。这里的归一化是指将x更改为x/∥x∥(将x的每个行向量除以其范数)。它通常会带来更好的性能,因为归一化后梯度下降的收敛速度更快。

 

例如,如果:

然后:

∥x∥=np.linalg.norm(x,轴=1,Keepdims=真)=[556−−√](2)

 

以及:

如果您问我们是如何得到除以5或除以sqrt(56)的,请回答:

以及:

接下来,我们将实现对矩阵x(单位长度)的每一行进行归一化的函数。对输入矩阵x应用第二个函数后,x的每一行应该是单位长度的向量:

 

为了测试我们的函数,我们将使用一个简单的数组调用它:

 

我们可以尝试打印x_norm和x的形状。您会发现它们具有不同的形状。这是正常的,因为x_norm取x的每一行的范数,所以x_norm的行数相同,但只有1列。那幺,当你用x除以x_norm时,它是如何工作的呢?这就是所谓的广播。

 

SoftMax功能:

 

现在,我们将使用NumPy实现SoftMax函数。当您的算法需要对两个或更多类进行分类时,您可以将Softmax视为归一化函数。您将在以后的教程中了解有关Softmax的更多信息。Softmax数学函数:

我们将创建一个Softmax函数,该函数计算输入x的每一行的Softmax:

 

为了测试我们的函数,我们将使用一个简单的数组调用它:

 

如果我们尝试打印上面的x_exp、x_sum和s的形状,您将看到x_sum的形状为(2,1),而x_exp和s的形状为(2,5)。x_exp/x_sum由于Python广播而起作用。

 

结论:

 

我们现在对python NumPy库有了很好的理解,并且已经实现了一些有用的函数,我们将在以后的深度学习教程中使用这些函数。

 

在本教程中,我们必须记住np.exp(X)适用于任何np.array(X),并将指数函数应用于每个坐标。Sigmoid函数及其梯度图像向量是深度学习中常用的两个函数。np.rehape也被广泛使用。在未来,您将看到保持矩阵和向量维度的直线型将有助于消除许多错误。您将看到NumPy具有高效的内置函数-广播,这在机器学习中非常有用。在这一点上,我们了解了关于NumPy库的一些很好的东西。我们将在下一个教程中学习矢量化,然后我们将开始编写我们的第一个梯度下降算法。

 

最初发表于https://pylessons.com/Logistic-Regression-part2 https://pylessons.com/Logistic-Regression-part2

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注