08 深度神经网络实践 - 神经网络和深度学习 [Deep Learning Specialization系列]

本文是深度学习专项课程的一部分,详细介绍了深度神经网络的实现过程,包括初始化参数、正向传播(LINEAR, LINEAR->ACTIVATION)、损失函数、反向传播(LINEAR, LINEAR->ACTIVATION的反向传播)以及参数更新。内容涵盖了L层神经网络的结构,使用ReLU和Sigmoid激活函数,并讨论了反向传播过程中的一些实际问题。" 121451045,8416182,设计模式解析:手动实现单例模式与Spring中的模式应用,"['java', '设计模式', '后端开发', '面试']
摘要由CSDN通过智能技术生成

本文是Deep Learning Specialization系列课程的第1课《Neural Networks and Deep Learning》中Deep Neural Network练习部分的学习笔记。

上一篇文章《07 深度神经网络 - 神经网络和深度学习 [Deep Learning Specialization系列]》对深度神经网络涉及到的公式进行了推到,这篇文章则主要是通过NumPy来将其实现。

深度神经网络的框架

首先从整体上对深度神经网络的框架做一个梳理,主要是包含5个步骤:

  1. 初始化L层神经网络的参数
  2. 正向传播
    • 在正向传播中,包含3部分,首先是实现Linear函数,
    • 再通过给定的ReLU和Sigmoid函数来,构成Linear-Activation函数
    • Linear-ReLU函数用作前L-1层,最后输出层使用Linear-Sigmoid函数
  3. 损失函数(代价函数)
  4. 反向传播
    • 反向传播与正向传播的计算类似,也是先实现反向传播中的Linear函数部分
    • 再根据给定的ReLU和Sigmoid函数的梯度,构成Linear-Activation的反向传播函数
    • 最后是输出层的Linear-Sigmoid反向传播函数和前L-1层的Linear-ReLU反向传播函数
  5. 更新参数

下面这张图做了很好的说明:
lmodeloutline

1. 初始化参数

在前面的练习中,针对2层神经网络,其参数的初始化为:

def initialize_parameters(n_x, n_h, n_y):
    W1 = np.random.randn(n_h, n_x) * 0.01
    b1 = np.zeros((n_h, 1))
    W2 = np.random.randn(n_y, n_h) * 0.01
    b2 = np.zeros((n_y, 1))

    parameters = {
        "W1": W1,
        "b1": b1,
        "W2": W2,
        "b2": b2
    }

    return parameters

对L层的神经网络,在初始化参数时,需要注意网络的层数以及各层网络的维度。这里引入一个layer_dims,即包含每层网络的维度信息的列表,最终参数初始化的过程为:

def initialize_parameters_deep(layer_dims):
    paramters = {}
    L = len(layer_dims)

    for l in range(1, L):
        paramters["W" + str(l)] = np.random.randn(layer_dims[l], layer_dims[l-1]) * 0.01
        paramters["b" + str(l)] = np.zeros((layer_dims[l], 1))

    return paramters

2. 正向传播

正向传播包含三部分:

  • LINEAR
  • LINEAR -> ACTIVATION,其中ACTIVATION是ReLU或Sigmoid函数
  • [LINEAR -> RELU] × \times × (L-1) -> LINEAR -> SIGMOID 完成整个模型

2.1 LINEAR

线性函数为: Z [ l ] = W [ l ] A [ l − 1 ] + b [ l ] Z^{[l]} = W^{[l]}A^{[l-1]} +b^{[l]} Z[l]=W[l]A[l1]+b[l],其中 A [ 0 ] = X A^{[0]} = X A[0]=X
实现很简单,但要注意需要将计算用到的参数作为cache输出,主要是为反向传播计算中使用:

def linear_forward(A, W, b):
    Z = np.dot(W, A) + b
    cache = (A, W, b)

    return Z, cache

2.2 LINEAR -> ACTIVATION

这里分两部分,前L-1层时使用ReLU激活函数,输出层是使用Sigmoid激活函数。

  • ReLu: A = r e l u ( Z ) = m a x ( 0 , Z ) A = relu(Z) = max(0, Z) A=relu(Z)=max(0,Z)
  • Sigmoid: σ ( Z ) = σ ( W A + b ) = 1 1 + e − ( W A + b ) \sigma(Z) = \sigma(W A + b) = \frac{1}{ 1 + e^{-(W A + b)}} σ(Z)=σ(WA+b)=1+e(WA+b)1

在计算时,采用该算式: A [ l ] =

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值