吴恩达神经网络与深度学习——神经网络基础
神经网络基础
2.1二分分类
识别图像中是否有猫
输入图像X为彩色图像大小为64*64,输出j结果标签y等于0时,图像中无猫,等于1图像中有猫。
将输入x展开成为一个列向量:
所以,输入特征向量为:
一些符号
(x,y) 代表独立样本
训练样本的数量:
测试样本的数量:
在python中shape()用来输出军阵维度
X.shape=(nx,m),Y.shape=(1,m)
2.2logistic回归
给一张图像x,预测这张图像上是否有猫y^=p(y=1|x)
x是一个nx维向量,y在0和1之间
2.3 Logistic回归损失函数
损失函数
y=1时,要损失函数小,则y^越大越好;
y=0时,y=1时,要损失函数小,则(1-y^)越大越好;
代价函数
2.4 梯度下降
想要找到最小化代价函数J(w,b)是的参数w及b
梯度下降法的思想
从初始点开始,朝着最陡的下坡方向下降。
repeat{
w:=w-alpha*dJ(w,b)/dw;
b:=b-alpha*dJ(w,b)/db;
}
2.5导数
a=2时,f(a)=6
a=2.001时,f(a)=6.003
该函数的导数(斜率)为高/宽 即3
a=5时,f(a)=15
a=5.001时,f(a)=15.003
该函数的导数(斜率)为高/宽 即3
2.6更多导数的例子
a=2时,f(a) = 4
a = 2.001时,f(a)=4.004
导数为4
a=5时,f(a) = 25
a = 5.001时,f(a)=25.010
导数为10
则
df(a)/da=2a
if f(a)=a^3
df(a)/da=3a^2
a=2时,f(a) = 8
a = 2.001时,f(a)=8.012
导数为12
if f(a)=lna
df(a)/da=1/a
a=2时,f(a) =0.6935
a = 2.001时,f(a)=0.69365
导数为0.5
2.7计算图
神经网络都是按照前向或后向传播过程来实现的。首先计算出神经网络的输出,紧接着进行一个反向传播操作,计算对应梯度或导数。
J(a,b,c)=3*(a+b*c)
1).u=b*c
2).v=a+u
3).J=3*v
该流程图,从左到右计算出J
2.8计算图的导数计算
J = 3v
v = 11--->11.001
J = 33--->11.003
dJ/dv=3
python dv=3
u=6--->6.001
v = 11--->11.001
J = 33--->11.003
dJ/du=3
python du=3
a=5--->5.001
v = 11--->11.001
J = 33--->11.003
dJ/da=3
python da=3
b=3--->3.001
u = 6--->6.002
J = 33--->11.006
dJ/db=6
python db=3
c=2--->2.001
u = 6--->6.003
J = 33--->11.009
dJ/dc=9
python dc=9
2.9 Logistic回归梯度下降
2.10 m个样本的梯度下降
2.11向量化
向量化通常用来消除代码中的for循环
'''for循环
z = 0
for i in range(n_x)
z +=w[i]*x[i]
z +=b
'''向量化
z = np.dot(w,x)+b
'''example
import numpy as np
a = np.array([1,2,3,4])
print(a)
import time
a = np.random.rand(1000000)
b = np.random.rand(1000000)
'''Vectorized version:
tic = time.time()
c = np.dot(a,b)
tio = time.time()
print(c)
print("Vectorized version:" + str(1000*(tio-tic))+"ms")
'''for loop
c = 0
tic = time.time()
for i in range (1000000):
c+=a[i]*b[i]
tio = time.time()
print(c)
print("for loop:" + str(1000*(tio-tic))+"ms")
2.12向量化的更多例子
例1
'''for loop:
u = np.zero((n,1))
for i in ...
for j in ...
u[i]+=A[i][j]*v[j]
'''vectorized version
u = np.dot(A,v)
例2 向量的指数
逻辑回归
2.13 向量化Logistic回归
z = np.dat(w.T,x)+b
2.14 向量化Logistic回归的梯度下降
m个样本的梯度下降
'''vectorized version
for iter in range(1000):'''梯度下降迭代
Z = np.dot(w.T,X)+b
A = sigmoid(Z)
J = -1/m*np.sum(Y*np.logA+(1-Y)*np.log(1-A)
dZ =A -Y
dw=1/m*np.dot(X,dZ.T)
db = 1/m*np.sum(dZ)
w = w - alphadw
b = b-alphadb
2.15 python中的广播
广播是一种让python代码执行更快的手段
计算四种食物中的卡路里
import numpy as np
A =np.array( [[56.0, 0 ,4.4, 68.0],
[1.2, 104.0, 52.0, 8],
[1.8, 135, 99, 0.9]])
print(A)
## axis = 0,竖直相加;axis = 1,水平相加;
cal = A.sum(axis=0)
print(cal)
## A :3*4 cal: 1*4
per = 100*A/cal.reshape(1,4)
print(per)
广播
如果你有一个m*n矩阵,加上或减去或乘以或除以一个n*1矩阵,python会把它复制m次变成m*n矩阵,然后再逐个元素做加减乘除。
python/numpy向量说明
#不要使用这个
a = np.random.randn(5)#生成一个轶为1的元组
print(a)
print(a.shape)
s = np.dot(a,a.T)
print(s)
a = np.random.randn(5,1)#生成一个5*1矩阵
print(a)
print(a.shape)
s = np.dot(a,a.T)
print(s)