神经网络深层网络实现

神经网络深层网络实现

步骤

  1. 随机初始化数据

    • 对于权重\(W^{[l]}\), 一般采用\(np.random.randn(l, l - 1) * \sqrt{{1\over{dimension\ of\ previous\ layer}}}\)
    • 如果当前的\(l\)层的激活函数为\(ReLU\), 则使用\(He\ initialization\), 也就是\(np.random.randn(l, l - 1) * \sqrt{{2\over{dimension\ of\ previous\ layer}}}\)
    • 对于偏移量\(b^{[l]}\), 一般采用\(np.zeros((l, 1))\)
  2. 确定迭代次数
  3. 进入迭代循环
  4. 前向传播, 主要目的是计算出AL
    • 在神经网络中会有很多层, 如果要通过一个函数直接前向传播到最后一层得到AL太返回, 一般定义一个辅助函数, 该辅助函数计算特定一层的输出值, 并在循环中调用该函数
    • 如:
      • linear_activation_forward: 辅助函数
      • L_model_forward: 主函数
    • 分辅助函数的好处:
      • 降低编码的复杂度
      • 可以方便为每个层定义定义不同的\(activate function\)
  5. 计算Cost
  6. 计算\(dAL\), 目的是初始化反向传播的起点
  7. 反向传播, 主要目的是计算出grads
    • 与第4点一样, 我们一般定义一个辅助函数, 该辅助函数计算特定一层的梯度, 并在循环中调用该函数
    • 如:
      • linear_activation_backward: 辅助函数
      • L_model_backward: 主函数
    • 分辅助函数的好处:
      • 降低编码的复杂度
      • 可以方便为每个层定义定义不同的\(activate function\)
  8. 更新参数
  9. 达到了指定的迭代次数, 退出循环

附加操作

正则化

  • L2正则化:

    • 影响cost和back propagation
    • 在训练集和测试集中都会使用
  • Dropout正则化:
    • 影响forward propagation和back propagation
    • 只能在训练集中使用
    • 原理
      • 在前向传播的时候, 设定一个keep_prob参数, 当keep_prob为1表示保留, 在0-1之间表示有特定的概率被保留, 如果被删除, 也只是将我们原来得到的激活函数的值变为0
      • 在反向传播的时候, 依据前向传播, 得到的dA1等也要对应的为0或者其他
    • 应用: 在计算机视觉中十分常见

    ## 激活函数选择

  • hidden layer中不会使用\(sigmoid function\), 但是在output layer, 如果是一个二分类问题, 使用\(sigmoid function\)
  • 一般地, 在hidden layer使用ReLU或者tanh
  • ReLU的导数: np.int64(relu(Z) > 0)

Optimization Methods

Mini-Batch

  • mini-batch size指的是一个mini-batch中含有的样本数量
  • 如果mini-batch size=m, 则为梯度下降, 当m很大的时候, 效率低
  • 如果mini-batch size=1, 则为随机梯度下降, 在下降的过程中有很多噪音; 会失去向量化的加速效果
  • 选择:
    • mini-batch size一般为64-512, 离散来讲为\(2^6\), \(2^7\), \(2^8\)
    • 如果数据量较小, 则直接使用batch梯度下降

    ####

核对矩阵的维度

  • 参考:

    • \(A^{[l]}\)是\(n_l \times m\)维的矩阵
    • \(W^{[l]}, W^{[l + 1]}\)都是矩阵
    • \(X^{[l]}\)是\(n_x \times m\)维的矩阵
  • 在向量公式中, 如果是一个列向量, 则在转为矩阵的时候将他们按照axis=1的方向堆积
  • 在向量公式中, 如果是一个行向量, 则在转为矩阵的时候将他们按照axis=0的方向堆积

全连接神经网络公式

  • 前向传播
  • 反向传播
    • \(dA^{[L]}=-({Y\over{A^{[L]}}} - {{1 - Y}\over{1 - A^{[L]}}})\), 进行反向传播初始化, 这个是必须的, 这里是\(sigmoid\)函数的对\(A^{[L]}\)的梯度
    • 现在假设共2层, 1层hidden layer, 1层output layer
    • \(dZ^{[2]}=dA^{[2]}.*g'(Z^{[2]})\)
    • \(dW^{[2]}={1\over m}dZ^{[2]}(A^{[1]})^T\)
    • \(db^{[2]}={1\over m}dZ^{[2]}\)
    • \(dZ^{[1]}=dA^{[1]}.*g'(Z^{[1]})\)
    • \(dW^{[1]}={1\over m}dZ^{[1]}X^T\)
    • \(db^{[1]}={1\over m}dZ^{[1]}\)

梯度检测

  • 使用传统的方法, 也就是导数的定义计算出梯度, 与反向传播计算的梯度相减, 如果在阈值内则合法

原文地址:https://www.cnblogs.com/megachen/p/10606621.html

时间: 2024-11-09 17:19:22

神经网络深层网络实现的相关文章

深层网络搜索核心技术研讨

自google在90年代末推出搜索引擎引来,搜索引擎的技术有了长足的进步,尤其在搜索结果的及时性.精准性等方面有了很大突破.但是这十多年来,搜索引擎一直在搜索表层网络,面对于数据量百倍于表层网络的深层网络(暗网),搜索引擎一直没有好的解决方案,无论是国外的深层网络表层化处理方式,还是国内以人工运营为主的数据开放平台的处理方式,都未能从根本上解决深层网络的搜索问题.深层网络搜索到底面临哪些困难,深层网络的搜索是否有解? 原文地址:http://www.infoq.com/cn/presentati

从自我学习到深层网络——建立你的第1个深度网络分类器

自我学习就是稀疏编码器串联一个Softmax分类器,上一节看到,训练400次,准确率为98.2% 在此基础上,我们可以搭建我们的第一个深度网络:栈式自编码(2层)+Softmax分类器 简单地说,我们把稀疏自编码器的输出作为更高一层稀疏自编码器的输入. 和自我学习很像,似乎就是新加了一层,但是其实不然: 新技巧在于,我们这里有个微调的过程,让残差从最高层向输入层传递,微调整个网络权重. 这个微调对于网络性能的提高非常明显,实际上后面将会看到. 网络结构如图所示: 图1 预先加载 minFunc

反馈神经网络Hopfield网络

一.前言 经过一段时间的积累,对于神经网络,已经基本掌握了感知器.BP算法及其改进.AdaLine等最为简单和基础的前馈型神经网络知识,下面开启的是基于反馈型的神经网络Hopfiled神经网络.前馈型神经网络通过引入隐层及非线性转移函数(激活函数)使得网络具有复杂的非线性映射能力.前馈网络的输出仅由当前输入和权矩阵决定,而与网络先前的输出状态无关.J.J. Hopfield教授在反馈神经网络中引入了能量函数的概念,使得反馈型神经网络运行稳定性的判断有了可靠依据,1985年Hopfield和Tan

深度学习Trick——用权重约束减轻深层网络过拟合|附(Keras)实现代码

在深度学习中,批量归一化(batch normalization)以及对损失函数加一些正则项这两类方法,一般可以提升模型的性能.这两类方法基本上都属于权重约束,用于减少深度学习神经网络模型对训练数据的过拟合,并改善模型对新数据的性能.       目前,存在多种类型的权重约束方法,例如最大化或单位向量归一化,有些方法也必须需要配置超参数.       在本教程中,使用Keras API,用于向深度学习神经网络模型添加权重约束以减少过拟合.       完成本教程后,您将了解: 如何使用Keras

卷积深层网络+图像定位

定义与概念: 定位问题与单纯的分类问题的区别,实际上是在softmax时多输出表示坐标的四个参数: (中心点bx by , 高和宽 bh bw ). ->比较早期的做法是使用滑动窗口, 先定义窗口尺寸, 依次识别窗口是否出现目标物体, 采用01分类. ->现在一般使用Bounding box + Anchor box,  以每个格子建立坐标系,左上角为0,0 取物体中心点 确定落在哪个格子. anchor box:  如果一个格子出现多种对象,首先根据这两个对象特征构建两个格子,每个格子还是8

深度学习原理与框架-递归神经网络-RNN网络基本框架(代码?) 1.rnn.LSTMCell(生成单层LSTM) 2.rnn.DropoutWrapper(对rnn进行dropout操作) 3.tf.contrib.rnn.MultiRNNCell(堆叠多层LSTM) 4.mlstm_cell.zero_state(state初始化) 5.mlstm_cell(进行LSTM求解)

问题:LSTM的输出值output和state是否是一样的 1. rnn.LSTMCell(num_hidden, reuse=tf.get_variable_scope().reuse)  # 构建单层的LSTM网络 参数说明:num_hidden表示隐藏层的个数,reuse表示LSTM的参数进行复用 2.rnn.DropoutWrapper(cell, output_keep_prob=keep_prob) # 表示对rnn的输出层进行dropout 参数说明:cell表示单层的lstm,o

UFLDL讲义十五:从自我学习到深层网络

注:本讲义来源为NG教授的机器学习课程讲义,详见 http://deeplearning.stanford.edu/wiki/index.php

吴恩达《深度学习》第一门课(4)深层神经网络

4.1深层神经网络 (1)到底是深层还是浅层是一个相对的概念,不必太纠结,以下是一个四层的深度神经网络: (2)一些符号定义: a[0]=x(输入层也叫做第0层) L=4:表示网络的层数 g:表示激活函数 第l层输出用a[l],最终的输出用a[L]表示 n[1]=5:表示第一层有五个神经元,第l层神经元个数用n[l]表示 4.2前向传播和反向传播 (1)前向传播:输入a[l-1],输出是a[l],缓存为z[l],步骤如下:(下面第一个式子应该是a[l-1]) 向量化: (2)反向传播:输入da[

第五章 神经网络

读书笔记 周志华老师的<机器学习> 因为边看边记,所以写在随笔里,如果涉及版权问题,请您联系我立马删除,[email protected] 5.1 神经元模型 “神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应.” 神经元模型:生物神经网络中,每个神经元与其他神经元相连,当它“兴奋”时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位:如果某神经元的电位超过了一个“阈值”,那么它就会被激活,即“兴奋”起来,向其他神经