python实现深层神经网络ANN算法

  • 吴恩达第四周课后编程作业
      • 首先load一些需要使用的包
    • 深层神经网络实现流程
      • 一.initialize parameters
      • 二.forward propagate
        • 1.linear forward
        • 2.linear activation forward
        • 3.forward model
      • 三.compute cost
      • 四.backward propagate
        • 1.linear backward
        • 2.linear activation backward
        • 3.backward model
      • 五.update parameters
      • 六.预测函数
      • 七.搭建一个多层神经网络模型
      • 八.测试结果

吴恩达第四周课后编程作业

首先load一些需要使用的包

import numpy as np
import h5py
import matplotlib.pyplot as plt
import testCases
from dnn_utils import sigmoid, sigmoid_backward, relu, relu_backward
import lr_utils

深层神经网络实现流程

一.initialize parameters

def initialize_parameters_deep(layers_dims):np.random.seed(3)L = len(layers_dims)params = {}for i in range(1,L):params["W"+str(i)] = np.random.randn(layers_dims[i],layers_dims[i-1])*0.01params['b'+str(i)]   = np.zeros((layers_dims[i],1))return params

犯的错/注意事项:

  1. 在for循环initialize W和b之前没有设定params={}
params = {}

二.forward propagate

linear_forward ➡️ linear_activation_forward ➡️ forward model (后者包含前者)

函数名 linear_forward linear_activation_forward forward model(N-1次relu,1次sigmoid)
输入 A_prev,W,b A_prev,W,b,activations X, parameters(初始的parameters 以及 forward➡️backward大循环更新后的parameters)
cache A_prev,W,b [(A_prev,W,b), (Z)] 小循环的cache用于backward
输出 Z, linear_cache A, linear_activation_cache AL, 小循环linear_activation_cache

1.linear forward

def linear_forward(A_prev,W,b):Z = np.dot(W,A_prev) + blinear_cache = (A_prev,W,b)assert(Z.shape == (W.shape[0],A_prev.shape[1]))return Z,linear_cache

犯的错/注意事项:
1.忘记用assert

2.linear activation forward

def linear_activation_forward(A_prev,W,b,activation):linear_activation_cache = []if activation =='relu':Z,linear_cache = linear_forward(A_prev,W,b)A,activation_cache = relu(Z)linear_activation_cache = (linear_cache,activation_cache)if activation == 'sigmoid':Z,linear_cache = linear_forward(A_prev,W,b)A,activation_cache = sigmoid(Z)linear_activation_cache = (linear_cache,activation_cache)return A,linear_activation_cache

犯的错/注意事项:
1.首先要定义linear_activation_cache用于最后统计linear_cache和activation_cache(其实不定义也可以,但定义了更清晰一些)

3.forward model

def L_model_forward(X,params):A = Xcache = []L = len(params)//2for i in range(1,L):A,linear_activation_cache = linear_activation_forward(A,params['W'+str(i)],params['b'+str(i)],'relu')cache.append(linear_activation_cache)AL,linear_activation_cache = linear_activation_forward(A,params['W'+str(L)],params['b'+str(L)],'sigmoid')cache.append(linear_activation_cache)assert(AL.shape == (1,X.shape[1]))return AL,cache

犯的错/注意事项:

  1. 将最开始输入的X赋值给A,然后将A带入前N-1次循环,在这个循环中没有记录每次循环A的值,只记录了W,b,Z的值。A的值只用于最后计算AL。

三.compute cost

def compute_cost(AL,y):m = y.shape[1]cost =(-1/m)*np.sum( (np.multiply(y,np.log(AL))+np.multiply(1-y,np.log(1-AL))))cost = np.squeeze(cost)return cost

犯的错/注意事项:

  1. cost的计算方式有很多种,这是其中一种

四.backward propagate

linear_backward ➡️ linear_activation_backward ➡️ backward_model

函数名 linear_backward linear_activation_backward backward model(N-1次relu,1次sigmoid)
输入 dZ,linear_cache dA,linear_activation_cache,activations AL,y(计算dAL),cache)
cache A_prev,W,b [(A_prev,W,b), (Z)] 用cache计算current_cache
输出 dA_prev,dW,db dZ(用于linear_backward),\n dA_prev,dW,db(linear_backward结果) grads(包括dA_prev,dW,db)

1.linear backward

def linear_backward(dZ,linear_cache):m = dZ.shape[1]A_prev,W,b = linear_cachedW = (1/m)*np.dot(dZ,A_prev.T)db = (1/m)*np.sum(dZ,axis=1,keepdims=True)dA_prev = np.dot(W.T,dZ)assert(dW.shape == W.shape)assert(db.shape == b.shape)assert(dA_prev.shape == A_prev.shape)return dA_prev,dW,db

犯的错/注意事项:

  1. dW不需要用np.sum,db需要用np.sum
  2. 两者都要除以m,但不用加负号(计算cost才要加负号)

2.linear activation backward

def linear_activation_backward(dA,cache,activation='relu'): ##activation_cache = Zlinear_cache,activation_cache = cache[0],cache[1]if activation == 'relu':dZ = relu_backward(dA,activation_cache)dA_prev,dW,db = linear_backward(dZ,linear_cache)if activation == 'sigmoid':dZ = sigmoid_backward(dA,activation_cache)dA_prev,dW,db =linear_backward(dZ,linear_cache)return dA_prev,dW,db

犯的错/注意事项:

  1. relu_backward/sigmoid_backward的输出值dZ是linear_backward的输入值

3.backward model

def L_model_backward(AL,y,cache): ##y用于计算dALL = len(cache)grads = {}y = y.reshape(AL.shape)dAL = -np.divide(y,AL) + np.divide(1-y,1-AL)current_cache = cache[L-1]grads['dA_prev'+str(L-1)],grads['dW'+str(L)],grads['db'+str(L)] = linear_activation_backward(dAL,current_cache,'sigmoid')for i in reversed(range(L-1)):current_cache = cache[i]grads['dA_prev'+str(i)],grads['dW'+str(i+1)],grads['db'+str(i+1)] = linear_activation_backward(grads['dA_prev'+str(i+1)],current_cache,'relu')return grads

犯的错/注意事项:

  1. 注意调用dA_prev,dW,db时应该是grads[‘dA_prev’+str()], grads[‘dW’+str()], grads[‘db’+str()]

五.update parameters

def update_parameters(params,grads,learning_rate ):L = len(params)//2for i in range(L):params['W'+str(i+1)] = params['W'+str(i+1)]  - learning_rate*grads['dW'+str(i+1)]params['b'+str(i+1)] = params['b'+str(i+1)]  -  learning_rate*grads['db'+str(i+1)]return params

六.预测函数

def predict(X,y,params):AL,cache = L_model_forward(X,params)y_predictions = np.round(AL)print('准确率为:'+str(float(np.mean(y_predictions==y))*100),'%')

七.搭建一个多层神经网络模型

##搭建L层神经网络
def L_layer_model(X,y,layers_dims,learning_rate = 0.0075,num_iterations=3000,print_cost=False,isPlot=True):costs = []params = initialize_parameters_deep(layers_dims)for i in range(num_iterations):AL,caches = L_model_forward(X,params)cost = compute_cost(AL,y)grads = L_model_backward(AL,y,caches)params = update_parameters(params,grads,learning_rate)if i%100==0:costs.append(cost)if print_cost:print('第',i,'次迭代的成本为:'+str(np.squeeze(cost)))if isPlot:plt.plot(costs)plt.showreturn params

犯的错/注意事项:

  1. initialize_parameters_deep在循环外
  2. 注意if isPlot 和 return 所在的层数 不要放到循环里面了

八.测试结果

train_set_x_orig , train_set_y , test_set_x_orig , test_set_y , classes = lr_utils.load_dataset()train_x_flatten = train_set_x_orig.reshape(train_set_x_orig.shape[0], -1).T
test_x_flatten = test_set_x_orig.reshape(test_set_x_orig.shape[0], -1).Ttrain_x = train_x_flatten / 255
train_y = train_set_y
test_x = test_x_flatten / 255
test_y = test_set_y
layers_dims = [12288, 20, 7, 5, 1] #  5-layer model
parameters = L_layer_model(train_x, train_y, layers_dims, num_iterations = 2500, print_cost = True,isPlot=True)

第 0 次迭代的成本为:0.7157315134137129
第 100 次迭代的成本为:0.6358104685472756
第 200 次迭代的成本为:0.624211729336833
第 300 次迭代的成本为:0.5942520895813624
第 400 次迭代的成本为:0.5177020189712547
第 500 次迭代的成本为:0.48029183540093934
第 600 次迭代的成本为:0.4491625467455897
第 700 次迭代的成本为:0.3978139540283668
第 800 次迭代的成本为:0.32885059833709007
第 900 次迭代的成本为:0.230716793378725
第 1000 次迭代的成本为:0.18255839538365654
第 1100 次迭代的成本为:0.07898759604417119
第 1200 次迭代的成本为:0.04898495328260282
第 1300 次迭代的成本为:0.03282016740817885
第 1400 次迭代的成本为:0.02402136845804331
第 1500 次迭代的成本为:0.01844661191200428
第 1600 次迭代的成本为:0.014628746116686056
第 1700 次迭代的成本为:0.011912712622317589
第 1800 次迭代的成本为:0.009927981714222066
第 1900 次迭代的成本为:0.008436457653828871
第 2000 次迭代的成本为:0.00728216755158834
第 2100 次迭代的成本为:0.006373272400546734
第 2200 次迭代的成本为:0.005638518640803364
第 2300 次迭代的成本为:0.005040539895217554
第 2400 次迭代的成本为:0.00454373648094516

pred_train = predict(train_x, train_y, parameters) #训练集
pred_test = predict(test_x, test_y, parameters) #测试集

准确率为:100.0 %
准确率为:74.0 %

python实现深层神经网络ANN算法相关推荐

  1. Python实现BP神经网络ANN单隐层回归模型项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 20世纪80年代中期,David Runelhart.Geoff ...

  2. Python实现BP神经网络ANN单隐层分类模型项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 BP(back propagation)神经网络是1986年由R ...

  3. 神经网络ANN算法——鸢尾花案例python实现

    个人对神经网络的理解 神经网络算法,是一个黑匣子,当你传入一些数据,并告诉它最终要达到的目标,整个神经网络就开始学习.但是,我们很难知道里面究竟发生了什么,也没有数学来严格推导和证明 黑匣子这玩意不可 ...

  4. 【项目实战】Python基于librosa和人工神经网络实现语音识别分类模型(ANN算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 语音识别发展到现在作为人机交互的重要接口已经在很多方面改变了我们 ...

  5. 02.改善深层神经网络:超参数调试、正则化以及优化 W2.优化算法(作业:优化方法)

    文章目录 1. 梯度下降 2. mini-Batch 梯度下降 3. 动量 4. Adam 5. 不同优化算法下的模型 5.1 Mini-batch梯度下降 5.2 带动量的Mini-batch梯度下 ...

  6. 人工神经网络ANN的算法总结

    用笔记,记录自己的点滴进步:用行动,驱赶心中的彷徨 --杰 人工神经网络ANN的算法总结 前言 卷积神经网络 相关名词解释 卷积层 激励层 池化层 全连接层 补充 参考资料与原文 前言 人工神经网络( ...

  7. 深层神经网络与优化算法

    深层神经网络与优化算法 为什么使用深层网络 对于人脸识别等应用,神经网络的第一层从原始图片中提取人脸的轮廓和边缘,每个神经元学习到不同边缘的信息:网络的第二层将第一层学得的边缘信息组合起来,形成人脸的 ...

  8. DL之ANN/DNN: 人工神经网络ANN/DNN深度神经网络算法的简介、应用、经典案例之详细攻略

    DL之ANN/DNN: 人工神经网络ANN/DNN深度神经网络算法的简介.应用.经典案例之详细攻略 相关文章 DL:深度学习(神经网络)的简介.基础知识(神经元/感知机.训练策略.预测原理).算法分类 ...

  9. 02.改善深层神经网络:超参数调试、正则化以及优化 W2.优化算法

    文章目录 1. Mini-batch 梯度下降 2. 理解 mini-batch 梯度下降 3. 指数加权平均数 4. 理解指数加权平均数 5. 指数加权平均的偏差修正 6. 动量Momentum梯度 ...

最新文章

  1. 2021.4.11 字节跳动实习笔试题---情报解密
  2. JavaScript内置函数及API
  3. Java基础之扩展GUI——添加状态栏(Sketcher 1 with a status bar)
  4. android各目录大小,Android 基础篇 — 放不同drawable文件夹中图片的大小
  5. 分数换算小数补0法_分数怎么化成整数 分数转化方法
  6. Dockerfile构建容器镜像 - 运维笔记
  7. 伤疤好了有黑印怎么办_春藤家长圈|家有二孩,老大老二一起抢东西,家长该怎么办?...
  8. vue视频保存不下来_视频素材制作小技巧
  9. 搭建 Harbor 1.10.6 高可用集群
  10. 小程序毕设作品之微信美食菜谱小程序毕业设计成品(6)开题答辩PPT
  11. 图片生成链接最简单的方法
  12. 这种网站我看见就收藏
  13. android 开发者模式 手机变慢,手机太卡?手机中的“开发者模式”你会用吗?试一下,瞬间流畅!...
  14. linux重装系统步骤 包含raid【主要针对服务器重装】
  15. vue 基于 Ant Design 实现表格序号
  16. python自然语言处理学习笔记二
  17. kali火狐浏览器设置中文
  18. 如何平衡MMO游戏 ——Einsphoton
  19. 大流量高并发互联网应用实践在线峰会:资料汇总(更新ing~)
  20. SAP ABAP 业务开关和 SAP 电商云的 Feature Level

热门文章

  1. java-生成印章swing
  2. 微信小程序开发(1)—— 微信小程序申请注册提交审核并发布详细流程
  3. 关于CH340驱动安装的种种问题的最终稳妥解决办法
  4. 国外期刊发表文章时一定用到的SCI论文写法攻略
  5. linux终端怎么打开计算器,如何通过终端启动计算器
  6. Java深度学习系列——对象流和序列化
  7. python编写米字格的步骤_1米字格制作步骤
  8. 头脑风暴:当我分析了我的经历后
  9. PHPMyWind编辑器支持pdf自动上传
  10. web前端工程师主要学什么内容