吴恩达课程笔记--第一/第二章

266 阅读3分钟

第一章

一.基本概念

- 1.杂七乱八

训练集的规模/训练样本数量---m

激活函数:sigmoid函数--->ReLU函数,梯度下降法运行的更快

正向传播/反向传播步骤

保存一张图片===需要保存RGB三个颜色通道,如果输入照片是64 * 64像素,则为三个64*64的矩阵

- 2.logistic回归====是一个用于二分分类的算法,参数是w,b

(1)模型如下图:

image.png

image.png 也相当于sigmoid(w^Tx+b)

image.png

(2)损失函数/误差函数L===用来衡量算法的运行情况(衡量单一训练样本的效果)

损失函数L通常都如下公式表示(衡量预测输出值和实际值有多接近): image.png

但是在logistic回归中,不这么做,误差平方的话,梯度下降法不太好使了,用如下新的函数,可以有凸的优化问题。 image.png image.png image.png

image.png y^的取值范围为(0,1),因为回归函数的公式。

(3)成本函数J

为了训练logistic回归模型的参数w和b,需要定义一个和参数相关的总体成本函数===它衡量的是在全体训练样本上的表现 image.png

image.png 被定义为:1/m的损失函数之和

凸 的 image.png

(4)如何使用梯度下降法==训练训练集上的参数w和b

通过数次迭代,达到/接近最底部的全局最优解 image.png

迭代就是每次更新w的值,找最优解。如下图所示,α为学习率,控制每次的步长。 image.png

新的w =w本身-学习率*导数 image.png

参数只有一个的话,求导用符号d;参数两个及以上的话,用那个偏导符号

python中,dvar表示导数

(5)正向/反向传播图===流程图

image.png

3.用偏导数 实现logistic回归的梯度下降法

logistic回归的公式:

L是损失函数 image.png

(1)该样本的偏导数流程图如下===单一训练样本:

正向: image.png 反向:(计算 损失函数L的导数) image.png

image.png 新的w =w本身-学习率*导数 即:W1= W1 - lr * dw1============学习率是α image.png

(2)该样本的偏导数流程图如下===全局训练样本(m个):

其实就是求平均 image.png

(3)实现步骤

  1. 初始化 (用for循环来计算相应的每个训练样本的导数,然后加起来) J=0,dw1=0,dw2=0...dwm=0,db=0 For i =1 to m Zi = W^T * Xi + b

a^i = σ(Z^i)

J+ = -[y^i log(a^i)+(1-y^i)log(1-a^i)]示例如下公式

image.png dz^i = a^i-y^i

dw1 += x1^i * dz^i

dw2 += x2^i * dz^i

...一直到dwn,(这里将会是第二个for循环,见下面备注)

db += dz^i

J/=m;dw1/=m;dw2/=m;db/=m; **这里的J是成本函数正确值

至此为止,损失函数J对各个参数w和b的导数已经求完

更新参数,开始梯度下降:

w1:=w1 - αdw1

w2:=w2 - αdw2

b := b

备注:

针对好多个for循环,针对大量数据集,计算效率会很低下,摆脱for循环的解决方法======向量化Vectorization

(4)向量化Vectorization

image.png 如图所示,左栏是for循环,右栏是向量化,用numpy的np.dot内置函数即可。

本地测试代码见:WUEnda\Two\Vectorization_ForLoop.py 指数用函数:np.exp() image.pngy

代码实现两个for循环都不要:np.dot(w.T,x)+b

3.向量化logistic回归===一次性

image.png 代码见:WUEnda\Two\Vectorization_ForLoop.py

二.命令及问题解决

X.shape---用来输出矩阵的维度,即(nx,m)

Y.shape---用来输出矩阵的维度,即(1,m)

使用plt.imshow()发现不能显示图片,加了plt.show()也还是不能显示
先引入包pylab
import pylab

然后在plt.imshow(img)后面添加一行代码
pylab.show()

图片框就显示出来了