第一章
一.基本概念
- 1.杂七乱八
训练集的规模/训练样本数量---m
激活函数:sigmoid函数--->ReLU函数,梯度下降法运行的更快
正向传播/反向传播步骤
保存一张图片===需要保存RGB三个颜色通道,如果输入照片是64 * 64像素,则为三个64*64的矩阵
- 2.logistic回归====是一个用于二分分类的算法,参数是w,b
(1)模型如下图:
也相当于sigmoid(w^Tx+b)
(2)损失函数/误差函数L===用来衡量算法的运行情况(衡量单一训练样本的效果)
损失函数L通常都如下公式表示(衡量预测输出值和实际值有多接近):
但是在logistic回归中,不这么做,误差平方的话,梯度下降法不太好使了,用如下新的函数,可以有凸的优化问题。
y^的取值范围为(0,1),因为回归函数的公式。
(3)成本函数J
为了训练logistic回归模型的参数w和b,需要定义一个和参数相关的总体成本函数===它衡量的是在全体训练样本上的表现
被定义为:1/m的损失函数之和
凸 的
(4)如何使用梯度下降法==训练训练集上的参数w和b
通过数次迭代,达到/接近最底部的全局最优解
迭代就是每次更新w的值,找最优解。如下图所示,α为学习率,控制每次的步长。
新的w =w本身-学习率*导数
参数只有一个的话,求导用符号d;参数两个及以上的话,用那个偏导符号
python中,dvar表示导数
(5)正向/反向传播图===流程图
3.用偏导数 实现logistic回归的梯度下降法
logistic回归的公式:
L是损失函数
(1)该样本的偏导数流程图如下===单一训练样本:
正向:
反向:(计算 损失函数L的导数)
新的w =w本身-学习率*导数
即:W1= W1 - lr * dw1============学习率是α
(2)该样本的偏导数流程图如下===全局训练样本(m个):
其实就是求平均
(3)实现步骤
- 初始化 (用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)]示例如下公式
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
如图所示,左栏是for循环,右栏是向量化,用numpy的np.dot内置函数即可。
本地测试代码见:WUEnda\Two\Vectorization_ForLoop.py
指数用函数:np.exp()
y
代码实现两个for循环都不要:np.dot(w.T,x)+b
3.向量化logistic回归===一次性
代码见: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()
图片框就显示出来了