为什么要向量化:使用for循环运行时间是使用向量运算运行时间的约300倍
我们把整个逻辑回归中的for循环尽可能用矩阵运算代替,对于单次迭代,梯度下降算法流程如下所示:
Z = np.dot(w.T,X) + b
A = sigmoid(Z)
dZ = A-Y
dw = 1/m*np.dot(X,dZ.T)
db = 1/m*np.sum(dZ)
w = w - alpha*dw
b = b - alpha*db
其中,alpha是学习因子,决定w和b的更新速度。上述代码只是对单次训练更新而言的,外层还需要一个for循环,表示迭代次数。
python中的广播机制:
如果我们要定义(5,1)的列向量或者(1,5)的行向量,最好使用下来标准语句,避免使用rank 1 array:
a = np.random.randn(5,1) #定义5,1)的列向量,标准定义法
b = np.random.randn(1,5)
assert(a.shape == (5,1)) #使用assert语句对向量或数组的维度进行判断
a.reshape((5,1)) #还可以使用reshape函数对数组设定所需的维度