MENU

Vectorizing Logistic Regression

March 29, 2019 • Read: 235 • Deep Learning

在本节中,我们将讨论如何实现逻辑回归的向量化计算

首先回归一下逻辑回归的向前传播步骤,如果你有$m$个训练样本,然后对第一个样本进行预测,那么你会使用一个熟悉的公式$z^{(i)}=\omega^Tx^{(1)}+b$,然后使用激活函数$a^{(i)}=\sigma(z^{(1)})$,于是我们得到了第一个样本的预测值

然后我们对第二个样本进行预测,$z^{(2)}=\omega^Tx^{(2)}+b$,$a^{(2)}=\sigma(z^{(2)})$

依此类推,如果你有$m$个训练样本,你可能需要这样做$m$次。有一个办法可以不需要任何一个明确的for循环

首先,回忆一下我们曾经定义了一个矩阵$X$作为训练输入(如下图蓝色$X$,是一个$n_x$行$m$列的矩阵),我们可以将它写成numpy的形式

现在我首先想做的是告诉你如何一步计算出$z_1,z_2,z_3...$,实际上,我们可以创建一个$1 \times m$的矩阵,这个矩阵内的元素分别代表$z_1,z_2,z_3...$,那么有$([z^{(1)}\ z^{(2)}\ ...\ z^{(m)}])=\omega^T X + [b\ b\ ...\ b]$。这里我将$[z^{(1)}\ z^{(2)}\ ...\ z^{(m)}]$定义为大写的$Z$。numpy命令$Z=np.dot(\omega.T,X)+b$,这里在Python中有一个巧妙地地方,$b$是一个实数,或者说是一个$1\times 1$的矩阵,但是当你用一个向量加上这个实数时,Python会自动把这个实数$b$扩展成一个$1\times m$的向量

用这一行代码就可以计算$Z$,而$Z$又是一个包含$z^{(1)}$到$z^{(m)}$的$1\times m$的矩阵,那么关于变量$a$又如何计算呢?

我们接下来要做的就是找到一个同时计算出$[a^{(1)}\ a^{(2)}\ ...\ a^{(m)}]$的方法,我们把这个矩阵定义为$A$。在编程作业中,你将看到怎样用一个向量在$sigmoid$函数中进行计算

总结一下,在这节中,我们不需要for循环,仅用一行代码计算出$Z$

Z = np.dot(w.T, X) + b
Archives Tip
QR Code for this page
Tipping QR Code