在吴恩达老师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_sigmoid_forward()的cache(只有一个,索引为L-1)

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相关推荐

  1. 【AiLearning】test2:搭建Shallow Netural Network

    在吴恩达老师DL系列课程的学习过程中,跟随做的一些小练习,在看懂别人代码基础上,整理的一些小笔记. 参考:https://blog.csdn.net/u013733326/article/detail ...

  2. 2020李宏毅机器学习笔记-Convolution Netural Network

    目录 Convolution Netural Network 摘要 本节内容综述 CNN V.s. DNN CNN架构提出的基础 1.Some patterns are much smaller th ...

  3. 【深度学习入门到精通系列】Deep Q Network

    文章目录 1 什么是 DQN 2 DQN 算法更新 (Tensorflow) 3 DQN 神经网络 (Tensorflow) 4 DQN 思维决策 (Tensorflow) 1 什么是 DQN 我们使 ...

  4. 7.Deep Interest Network for Click-Through Rate Prediction论文详解

    一.总述 这是2018年阿里Guorui Zhou等人发表在KDD上的一篇论文.论文提出在CTR任务中,丰富的用户历史行为数据包含了用户多种兴趣,对于不同的候选广告,起作用的用户历史行为数据表示应该不 ...

  5. 人群密度估计--CrowdNet: A Deep Convolutional Network for Dense Crowd Counting

    CrowdNet: A Deep Convolutional Network for Dense Crowd Counting published in the proceedings of ACM ...

  6. Deep Belief Network简介——本质上是在做逐层无监督学习,每次学习一层网络结构再逐步加深网络...

    from:http://www.cnblogs.com/kemaswill/p/3266026.html 1. 多层神经网络存在的问题 常用的神经网络模型, 一般只包含输入层, 输出层和一个隐藏层: ...

  7. Deep Belief Network简介

    1. 多层神经网络存在的问题 常用的神经网络模型, 一般只包含输入层, 输出层和一个隐藏层: 理论上来说, 隐藏层越多, 模型的表达能力应该越强.但是, 当隐藏层数多于一层时, 如果我们使用随机值来初 ...

  8. 深度学习(四十)——深度强化学习(3)Deep Q-learning Network(2), DQN进化史

    Deep Q-learning Network(续) Nature DQN DQN最早发表于NIPS 2013,该版本的DQN,也被称为NIPS DQN.NIPS DQN除了提出DQN的基本概念之外, ...

  9. 深度学习(三十九)——深度强化学习(2)概述, Deep Q-learning Network(1)

    概述 上图是深度强化学习的脉络图,参考文献中还有该领域的关键论文列表. 原图地址: http://louiskirsch.com/maps/reinforcement-learning 参考: htt ...

最新文章

  1. 智能车竞赛计时系统感应线圈放在节能充电线圈上输出电压会多大?
  2. 悼念程序员的那些难忘时刻 漫画组图(一)
  3. JavaScript——Prototype详探
  4. js 正则表达式奇偶字符串替换_js正则表达式replace替换变量方法
  5. Android之仿ele地图定位效果
  6. Font Awesome入门教程
  7. 单片机的现状即发展前景
  8. c++单例模式示例代码
  9. 计算机考试没关好文件,挽救未存盘WPS文件慎点关闭按钮
  10. po是什么意思java_PO/VO/DAO/BO/POJO是什么(JAVA 的解釋)
  11. POSTMAN中文版本
  12. 关闭计算机界面,电脑关机卡在关机界面怎么办?详细原因分析及解决方法来啦!...
  13. python .center用法_python之testcenter操作
  14. 会员中心—1—登录与注册
  15. 《你一学就会的-思维大图》读书笔记
  16. 计算机专业专科学校排名分数,计算机专业专科学校录取分数
  17. 求三角形的外接圆圆心个半径
  18. 深入理解MySQL索引之B+Tree(转载)
  19. 震惊!小猪的设计模式初涉总结!纯干货~
  20. Simditor用法

热门文章

  1. proxmox PVE 安装 黑苹果
  2. 汉信码生成和识别SDK
  3. 《Dreamweaver CS6 完全自学教程》笔记 第十四章:使用 CSS 设计网页
  4. android 解决按钮、imageView 背景图片拉伸变大的问题
  5. python两个表格相同数据筛选_如何将多个表格中数据筛选汇总在一个表格里?
  6. siamfc-pytorch代码讲解(三):demotrack
  7. vue 使用fs_在vue里面使用iVew框架
  8. debian linux下载路径,Debian 常用命令,debian常用命令
  9. 突破传统—复旦大学大数据学院张力课题组提出语义分割全新方案
  10. 程序人生 - 2020年杭州市积分入学实施办法权威解读