吴恩达深度学习笔记(三)
二、神经网络的编程基础(Basics of Neural Network programming)
5.逻辑回归中的梯度下降( Logistic Regression Gradient Descent)
假设样本只有两个特征𝑥1和 𝑥2,为了计算 𝑧,我们需要输入参数 𝑤1、 𝑤2 和 𝑏,除此之外还有特征值 𝑥1和 𝑥2。因此 𝑧的计算公式为: 𝑧=𝑤1𝑥1+𝑤2𝑥2+𝑏。
- 第一步:计算dz
逻辑回归公式
损失函数
代价函数
单个样本的代价函数为:
其中𝑎是逻辑回归的输出, 𝑦是样本的标签值。
代价函数 𝐿(𝑎,𝑦)关于 𝑎的导数:
- 第二步:计算w和b变化对代价函数L的影响
在该例子中:
- 第三步:
更新 𝑤1=𝑤1−𝑎𝑑𝑤1, 更新 𝑤2=𝑤2−𝑎𝑑𝑤2 ,更新 𝑏=𝑏−𝛼𝑑𝑏。
6.向量化 (Vectorization)
代码实现
:
import numpy as np
import time # 导入时间库
a = np.random.rand(1000000)
b = np.random.rand(1000000) #通过 round 随机得到两个一百万维度的数组
tic = time.time() # 现在测量一下当前时间
#向量化的版本
c = np.dot(a,b)
toc = time.time()
print("随机数为:" + str(c))
print("向量化版本时间:"+ str(1000*(toc-tic)) +"ms") #打印一下向量化的版本的时间
#非向量化的版本
c = 0
tic = time.time()
for i in range(1000000):
c += a[i]*b[i]
toc = time.time()
print("随机数为:" + str(c))
print("非向量化版本时间:" + str(1000*(toc-tic)) + "ms") #打印 for 循环的版本的时间
结果展示
:
随机数为:250041.37224043452
向量化版本时间:4.990339279174805ms
随机数为:250041.37224043184
非向量化版本时间:401.25465393066406ms
一句话总结,和for循环相比,向量化可以快速得到结果。
7.Python 中的广播( Broadcasting in Python)
- A.sum(axis = 0) 中的参数 axis 。
axis用来指明将要进行的运算是沿着哪个轴执行,0轴是垂直的,也就是列,而 1轴是水平的,也就是行。 - 广播机制
- 如果两个数组的后缘维度的轴长度相符或其中一方的轴长度为1,则认为它们是广播兼容的。广播会在缺失维度和轴长度为 1的维度上进行。
- 后缘维度的轴长度:
A.shape[-1] 即矩阵维度元组中的最后一个位置的值