【AiLearning】test3:搭建Deep Netural Network
在吴恩达老师DL系列课程的学习过程中,跟随做的一些小练习,在看懂别人代码基础上,整理的一些小笔记。
源代码参考:https://blog.csdn.net/u013733326/article/details/79767169
DL中的列表、元组与字典
在DL的算法中,需要将一些参数存储起来,方便在下一次的前向传播与反向传播过程中,直接调用。
据观察,参考代码中,常常将存储变量定义为列表、元组或字典类型。
1、在初始化函数initialize_parameters_deep中,将参数存储于字典变量parameters
返回parameters为字典类型:
parameters - 包含参数“W1”,“b1”,...,“WL”,“bL”的字典:
W1 - 权重矩阵,维度为(layers_dims [1],layers_dims [1-1])
b1 - 偏向量,维度为(layers_dims [1],1)
①先创建空字典
parameters = {}
②再赋值
for l in range(1,L):
parameters["W" + str(l)] = np.random.randn(layers_dims[l], layers_dims[l - 1]) / np.sqrt(layers_dims[l - 1])
parameters["b" + str(l)] = np.zeros((layers_dims[l], 1))
③调用
print("W1 = " + str(parameters["W1"]))
print("b1 = " + str(parameters["b1"]))
2、在前向传播函数的线性部分linear_forward中,将参数存储于元组变量cache
def linear_forward(A,W,b):
Z = np.dot(W,A) + b
assert(Z.shape == (W.shape[0],A.shape[1]))
cache = (A,W,b)
print(type(cache)) #tuple类型
return Z,cache
3、在前向传播函数的线性激活部分linear_activation_forward中,先将参数各自存储于两个中间变量linear_cache和activation_cache(元组类型)中,再添加至元组变量cache中
def linear_activation_forward(A_prev,W,b,activation):
if activation == "sigmoid":
Z, linear_cache = linear_forward(A_prev, W, b) # linear_cache中,存储的为A_pre(X),w,b,前向传播函数线性部分时的输入参数,计算后的结果为Z
A, activation_cache = sigmoid(Z) # activation_cache中,存储的为Z,前向传播函数线性激活部分时的输入参数,计算后的结果为A
elif activation == "relu":
Z, linear_cache = linear_forward(A_prev, W, b)
A, activation_cache = relu(Z)
cache = (linear_cache,activation_cache) #将 linear_cache 与 activation_cache 放入新元组 cache 中
return A,cache
# 元组的妙用:因为元组不可修改,所以对元组反复赋值时,并不是修改元组自身,而是创建了新的元组
4、多层神经网络的前向传播函数L_model_forward中,将元组类型的存储变量cache,添加至列表类型的存储变量caches中
def L_model_forward(X,parameters):
caches = [] #列表型变量
A = X
L = len(parameters) // 2
for l in range(1,L):
A_prev = A
A, cache = linear_activation_forward(A_prev, parameters['W' + str(l)], parameters['b' + str(l)], "relu")
caches.append(cache) #将元组类型的变量放入列表中,在列表末尾添加新变量
AL, cache = linear_activation_forward(A, parameters['W' + str(L)], parameters['b' + str(L)], "sigmoid")
caches.append(cache)
return AL,caches
DL的反向传播
与前向传播类似,我们有需要使用三个步骤来构建反向传播
- LINEAR 后向计算:单层实现反向传播的线性部分(输入dZ)
- LINEAR -> ACTIVATION 后向计算,其中ACTIVATION 计算Relu或者Sigmoid 的结果:单层实现LINEAR -> ACTIVATION层的后向传播(输入dA,求dZ但不输出dZ,dZ为中间变量)
- [LINEAR -> RELU] × \times × (L-:1) -> LINEAR -> SIGMOID 后向计算 (整个模型):输入AL(概率向量yhat,正向传播的输出)
L_model_backward(AL,Y,caches)
linear_activation_backward(dA,cache,activation="relu")
linear_backward(dZ,cache)
函数 | 输入 | 输出 | cache | 作用 |
L_model_backward() | AL,Y,caches |
grads - 具有梯度值的字典 grads [“dA”+ str(l)] = ... grads [“dW”+ str(l)] = ... grads [“db”+ str(l)] = ... |
caches - 包含“relu”和“sigmiod”两激活函数linear_activation_forward的cache的列表; linear_relu_forward()的每个cache(有L-1个,索引为从0到L-2) linear_activation_forward 的 cache - 包含“linear_cache” 和 “activation_cache” 的元组; cache = (linear_cache,activation_cache) linear_cache - 里面存储的为线性传播部分的A,w,b; activation_cache - 里面存储的为线性运算后的结果Z; |
L层反向传播参数的计算 |
linear_activation_backward() | dA,cache,activation="relu" | dA_prev,dW,db | 存储的用于有效计算反向传播的值的元组(值为linear_cache,activation_cache),即linear_activation_forward的cache。 | 单层反向传播参数的计算 |
linear_backward() | dZ,cache | dA_prev,dW,db | cache - 来自当前层前向传播的值的元组(A_prev,W,b) | 单层反向传播的线性部分计算,不包括dZ的计算 |
【AiLearning】test3:搭建Deep Netural Network相关推荐
- 【AiLearning】test2:搭建Shallow Netural Network
在吴恩达老师DL系列课程的学习过程中,跟随做的一些小练习,在看懂别人代码基础上,整理的一些小笔记. 参考:https://blog.csdn.net/u013733326/article/detail ...
- 2020李宏毅机器学习笔记-Convolution Netural Network
目录 Convolution Netural Network 摘要 本节内容综述 CNN V.s. DNN CNN架构提出的基础 1.Some patterns are much smaller th ...
- 【深度学习入门到精通系列】Deep Q Network
文章目录 1 什么是 DQN 2 DQN 算法更新 (Tensorflow) 3 DQN 神经网络 (Tensorflow) 4 DQN 思维决策 (Tensorflow) 1 什么是 DQN 我们使 ...
- 7.Deep Interest Network for Click-Through Rate Prediction论文详解
一.总述 这是2018年阿里Guorui Zhou等人发表在KDD上的一篇论文.论文提出在CTR任务中,丰富的用户历史行为数据包含了用户多种兴趣,对于不同的候选广告,起作用的用户历史行为数据表示应该不 ...
- 人群密度估计--CrowdNet: A Deep Convolutional Network for Dense Crowd Counting
CrowdNet: A Deep Convolutional Network for Dense Crowd Counting published in the proceedings of ACM ...
- Deep Belief Network简介——本质上是在做逐层无监督学习,每次学习一层网络结构再逐步加深网络...
from:http://www.cnblogs.com/kemaswill/p/3266026.html 1. 多层神经网络存在的问题 常用的神经网络模型, 一般只包含输入层, 输出层和一个隐藏层: ...
- Deep Belief Network简介
1. 多层神经网络存在的问题 常用的神经网络模型, 一般只包含输入层, 输出层和一个隐藏层: 理论上来说, 隐藏层越多, 模型的表达能力应该越强.但是, 当隐藏层数多于一层时, 如果我们使用随机值来初 ...
- 深度学习(四十)——深度强化学习(3)Deep Q-learning Network(2), DQN进化史
Deep Q-learning Network(续) Nature DQN DQN最早发表于NIPS 2013,该版本的DQN,也被称为NIPS DQN.NIPS DQN除了提出DQN的基本概念之外, ...
- 深度学习(三十九)——深度强化学习(2)概述, Deep Q-learning Network(1)
概述 上图是深度强化学习的脉络图,参考文献中还有该领域的关键论文列表. 原图地址: http://louiskirsch.com/maps/reinforcement-learning 参考: htt ...
最新文章
- 智能车竞赛计时系统感应线圈放在节能充电线圈上输出电压会多大?
- 悼念程序员的那些难忘时刻 漫画组图(一)
- JavaScript——Prototype详探
- js 正则表达式奇偶字符串替换_js正则表达式replace替换变量方法
- Android之仿ele地图定位效果
- Font Awesome入门教程
- 单片机的现状即发展前景
- c++单例模式示例代码
- 计算机考试没关好文件,挽救未存盘WPS文件慎点关闭按钮
- po是什么意思java_PO/VO/DAO/BO/POJO是什么(JAVA 的解釋)
- POSTMAN中文版本
- 关闭计算机界面,电脑关机卡在关机界面怎么办?详细原因分析及解决方法来啦!...
- python .center用法_python之testcenter操作
- 会员中心—1—登录与注册
- 《你一学就会的-思维大图》读书笔记
- 计算机专业专科学校排名分数,计算机专业专科学校录取分数
- 求三角形的外接圆圆心个半径
- 深入理解MySQL索引之B+Tree(转载)
- 震惊!小猪的设计模式初涉总结!纯干货~
- Simditor用法
热门文章
- proxmox PVE 安装 黑苹果
- 汉信码生成和识别SDK
- 《Dreamweaver CS6 完全自学教程》笔记 第十四章:使用 CSS 设计网页
- android 解决按钮、imageView 背景图片拉伸变大的问题
- python两个表格相同数据筛选_如何将多个表格中数据筛选汇总在一个表格里?
- siamfc-pytorch代码讲解(三):demotrack
- vue 使用fs_在vue里面使用iVew框架
- debian linux下载路径,Debian 常用命令,debian常用命令
- 突破传统—复旦大学大数据学院张力课题组提出语义分割全新方案
- 程序人生 - 2020年杭州市积分入学实施办法权威解读