您的位置:首页 > 其它

吴恩达深度学习第一课第二周

2018-03-05 22:49 274 查看

第二周 神经网络基础

打卡(1)

2.1 二分类

在二分分类问题中 目标是训练处一个分类器,它以图片(本例中)的特征向量X作为输入,来预测输出的结果标签y是1还是0,也就是预测图片中是否有猫。

课程中会用到的数学符号:

(x,y)(x,y):表示一个单独的样本;

x∈Rnxx∈Rnx:表示x是nxnx维的特征向量;

y∈y∈{0, 1} :标签y值为0或1;

训练集有m个训练样本构成:(x(1),y(1))(x(1),y(1))表示样本一的输入和输出;(x(2),y(2))(x(2),y(2))表示样本二的输入和输出…(x(m),y(m))(x(m),y(m)),这些样本整个一起就表示训练集,m表示训练样本的个数。m=mtrain(训练集),m=mtest(测试集)m=mtrain(训练集),m=mtest(测试集);

神经网络中构建的输入矩阵XX中,通常行表示样本数; 列表示特征维度。



2.2 logistic回归



(向量ww一般默认为列向量,转置为行向量)

* sigmoid函数的函数值∈∈{0,1},且当自变量趋近负无穷大时,函数值趋近为0; 当自变量趋近为正无穷大是,函数值趋近为1.

* 神经网络中,特征参数向量ww和截距bb通常看做独立的参数,不像红色公式中那样表达会更好(红色公式在本课程中不会使用)

2.3 logistic回归损失函数



logistic的损失函数是:−(ylogŷ +(1−y)log(1−ŷ ))−(ylogy^+(1−y)log(1−y^)) (logistic的损失函数之所以不用12(ŷ −y)212(y^−y)2是因为这个损失函数在使用梯度下降法时可能会产生非凸优化问题)。

* 损失函数适用于单个训练样本;而成本函数是基于参数的总成本,在训练logistic模型时,我们要找到合适的参数ww和bb,就是找到让的成本函数JJ尽可能小的ww和bb。

打卡(2)

2.4 梯度下降法



通过梯度下降法求解使得成本函数最小的参数向量ww和截距bb。



* 编写代码时ww的对J(w,b)J(w,b)的偏微分用dwdw表示,bb的偏微分用dbdb表示

2.5 导数

(略)

2.6 更多的导数例子

(略)

2.7 流程图



* 流程图是用蓝色箭头画出来的,从左到右的计算

* 流程图的导数是用红色箭头画出来的,从右到左

2.8 流程图的导数计算(反向传播)



2.9 logistic回归中的梯度下降



* "dz"=dlda∗dadz"dz"=dlda∗dadz,

其中,

a=σ(z)=11+e−za=σ(z)=11+e−z

dadz=e−z(1+e−z)2=1(1+e−z)(1−11+e−z)=a(1−a)dadz=e−z(1+e−z)2=1(1+e−z)(1−11+e−z)=a(1−a)

"dz"=a−ya(1−a)∗a(1−a)=a−y"dz"=a−ya(1−a)∗a(1−a)=a−y

打卡(3)

2.10 m个样本的梯度下降





2.11 向量化

Z=wTx+bZ=wTx+b,

其中,w,xw,x都是列向量;

代码表示为:

z=np.dot(w,x)


import numpy as np
a=np,array([1,2,3,4])
print(a)
>>>[1 2 3 4]


import time
a= np.random.rand(1000000)
b= np.random.rand(1000000)

tic=time.time()
tic=np.dot(a,b)
toc=time.time()

print("vectorized version:"+str(1000*(toc-tic))+"ms")


向量化计算,比循环遍历计算速度快很多。

SIMD:并行计算(在GPU和CPU都行)

2.12 向量化的更多例子

Python中实现将

V=[v1,...,vn]TV=[v1,...,vn]T,转换成

U=[ev1,...,evn]TU=[ev1,...,evn]T,可以用向量化方法(避免循环遍历)。

import numpy as np
u=np.exp(v)

np.log(v)
np.abd(v)
np.maxnum(v,0)
v**2  #v中的每个元素平方
1/v   #v中的每个元素的导数


2.13 向量化logistic回归



2.14 向量化logitici回归的梯度计算





2.15 python中的广播

(略)

2.16 关于Python/numpy向量说明

编写神经网络程序是,最好不要用1维数组,用矩阵

a=np.random.randn(5)
a.shape
>>>>(5,)  #这不属于矩阵


创建向量时,把向量定义为列向量易于运算

a=np.random.randn(5,1)
a.shape
>>>>(5,1) #列向量

assert(a.shape==(5,1)) 声明矩阵的维度


2.17 Jupter/Ipython笔记本的快速指南

(略)

2.18 logistic损失函数的解释

损失函数:



成本函数:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐