深度学习笔记3:手动搭建深度神经网络(DNN)

本文介绍了如何手动搭建深度神经网络(DNN),包括网络结构定义、参数初始化、前向传播(涉及ReLU激活函数)、损失计算、反向传播和权值更新。通过实例详细阐述了深度学习中的关键步骤,强调了数学在深度学习中的重要性,并提供了一个完整的DNN搭建过程。
摘要由CSDN通过智能技术生成

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tsaiedu,并注明消息来源,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

作者简介:
鲁伟:一个数据科学践行者的学习日记。数据挖掘与机器学习,R与Python,理论与实践并行。
个人公众号:数据科学家养成记 (微信ID:louwill12)
配套学习视频教程: 手把手教你用Python 实践深度学习

在笔记 1 和 2 里笔者使用 numpy 手动搭建了感知机单元与一个单隐层的神经网络,理解了神经网络的基本架构和传播原理,掌握了如何从零开始手写一个神经网络。但以上仅是神经网络和深度学习的基础内容,深度学习的一大特征就在于隐藏层之深。因而,我们就这前面的思路,继续利用 numpy 工具,手动搭建一个 DNN 深度神经网络。

再次回顾一下之前我们在搭建神经网络时所秉持的思路和步骤:

  • 定义网络结构

  • 初始化模型参数

  • 循环计算:前向传播/计算当前损失/反向传播/权值更新

3901436-2cfb140109006a58.png
image.png

神经网络的计算流程

初始化模型参数

对于一个包含L层的隐藏层深度神经网络,我们在初始化其模型参数的时候需要更灵活一点。我们可以将网络结构作为参数传入初始化函数里面:

def initialize_parameters_deep(layer_dims):
    np.random.seed(3)
    parameters = {}    
    # number of layers in the network
    L = len(layer_dims)            

    for l in range(1, L):
        parameters['W' + str(l)] = np.random.randn(layer_dims[l], layer_dims[l-1])*0.01
        parameters['b' + str(l)] = np.zeros((layer_dims[l], 1))  
      
    assert(parameters['W' + str(l)].shape == (layer_dims[l], layer_dims[l-1]))        
    assert(parameters['b' + str(l)].shape == (layer_dims[l], 1))
    return parameters
以上代码中,我们将参数 `layer_dims` 定义为一个包含网络各层维数的 `list` ,使用随机数和归零操作来初始化权重 `W` 和偏置 `b` 。

比如说我们指定一个输入层大小为 5 ,隐藏层大小为 4 ,输出层大小为 3 的神经网络,调用上述参数初始化函数效果如下:

parameters = initialize_parameters_deep([5,4,3])
print("W1 = " + str(parameters["W1"]))
print("b1 = " + str(parameters["b1"]))
print("W2 = " + str(parameters["W2"]))
print("b2 = " + str(parameters[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值