二元分类
把图片的三个(RGB)64*64矩阵展开成为x列向量,维度n=nx=64*64*3
符号:m是训练数据个数
X是将......排列成(nx,m)大小的矩阵
Y是将......排列成(1,m)大小的行向量,因为二分类,y只能取0或1
逻辑回归:注意y^hat在0到1之间,所以使用sigmond函数。注意w大小是nx维向量,b是常数。
给出逻辑回归的损失函数:计算单个训练实例的误差-(ylog(y^hat)+(1-y)log(1-y^hat))
成本函数:损失函数求和平均,成本函数是整个训练集损失函数的平均值。
梯度下降:derivatives导数
计算图:蓝色箭头计算各个值,红色箭头计算导数
计算dJ/da利用链式法则,用da代表dJ(即最终输出变量)/da,例:dv代表dJ/dv
对损失函数利用计算图向前求导,为了计算出dw1,dw2.db用以给出新的w1,w2,b值
在m个训练数据上进行求导,注意dz有上标而dw1,dw2没有上标,因为是累加起来的。应该有两层循环,外层是m个数据,内层是n个wi特征。
矢量化:使用numpy函数避免显示的for循环
可以使用w而不是wi来去掉上上图中的内层循环,但是对m个样例的循环还在。
Z:矩阵,用一行numpy代码计算出Z,包含m个zi,不需要遍历m个样例,一行代码矢量化即可以实现。
计算A:是m个ai的矩阵,加一个σ函数激活。
上图是逻辑回归的正向传播。
蓝色是未改进部分,紫色是用矢量化改进部分,红色框起来的两个是一行代码实现for循环m个样例。
左边使用两层循环,右边没有使用显式的for循环,使用矢量化完成逻辑回归的一次梯度下降。如果需要进行很多次迭代,还是需要使用for循环。
python中矩阵的广播:axis=0代表按列求和,如何让3*4的矩阵除以1*4的矩阵
使用reshape确定不确定的矩阵的大小
广播的例子:自动扩充
广播的通用规则:小规模的矩阵扩充为大规模的矩阵以进行计算。
不要使用上边的用法,使用下面的写法,利用断言assert和reshape来确定矩阵的大小符合预期。