吴恩达神经网络与深度学习——神经网络概述

神经网络基础

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)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cherry1307/article/details/83346129