第二篇主要讲述向量化运算带来的运算速度地提升以及代码的简洁,还有运用python实现逻辑回归的过程
Vectorization
下图左边是上一篇我们提到的逻辑回归算法,我们发现如果我们的数据量很大,而且参数很多的话,那么我们的for loop循环将非常耗时,再因为我们不止训练一次,而是要多次训练,将会非常耗时,因此为了让神经网络可实施,引入python的向量化运算,就会变成下图右边,不仅运算速度提高,而且代码也更加简洁。
Practice
接下来讲解实际使用python实现逻辑回归的过程,我们要完成的是对于图像的二分类问题,即该图是猫还是不是猫。输入图片经过神经网络输出预测 y = 1 y = 1 y=1(是猫) or y = 0 y = 0 y=0 (不是猫)
第一步:数据的预处理
- 平铺数据变为列向量
- 数据均值归一化,对于图片数据简单除以255进行处理
### flatten datasets
train_set_x_flatten = train_set_x_orig.reshape(train_set_x_orig.shape[0], -1).T
test_set_x_flatten = test_set_x_orig.reshape(test_set_x_orig.shape[0], -1).T
### standardize dataset
train_set_x = train_set_x_flatten/255.
test_set_x = test_set_x_flatten/255
第二步:实现前向传播(计算当前代价函数值)与后向传播(计算当前梯度)
前向传播:
- A = σ ( w T X + b ) = ( a ( 0 ) , a ( 1 ) , . . . , a ( m − 1 ) , a ( m ) ) A = \sigma(w^T X + b) = (a^{(0)}, a^{(1)}, ..., a^{(m-1)}, a^{(m)}) A=σ(wTX+b)=(a(0),a(1)