网易 Andrew Ng DL课程学习记录 -(1)利用python建立神经网络模型

建立神经网络模型

由于网易深度学习课程只有视频部分,配套的作业还没上线,故只得进行自我练习。

课程共分为5个大部分,其中有三个大部分是连续的,剩下两个为补充部分,现笔者已经完成了第一大部分-神经网络和深度学习,为了更好的进行接下来的学习,必须保证这一基础部分完全掌握,所以就利用这一部分吴教授所提到的整个神经网络的构造方法,利用python语言,进行详尽的建模工作,让自己把这部分的知识学扎实。

首先做出一个base architecture

import pandas as pd
import numpy  as np


def neuralnetworkslmodel(n):

    #0 assumption
    #tree layers - 4 4 1 -  

    #1 input data
    trainningset=loaddata()  
    X1=trainningset[:-1]
    y=trainningset[-1]
    m=len(y)

    #2 initialization parameters
    W1=np.random.randn((m,4))
    W2=np.random.randn((4,4))
    W3=np.random.randn((4,1))
    b1=0
    b2=0    
    b3=0


    #3 forward propagation
    Z1=X1*w1+b1
    A1=actfun(z1)

    Z2=A1*w2+b2
    A2=actfun(Z1)

    Z3=A2*w2+b2
    A3=actfun(Z1)  

    #4 bakcward propagation - gradient descent

    #gradient
    dZ3=A3-y
    dW3=dZ3*A2.T/m
    db3=np.sum(dZ3,axis=1,keepdims=True)

    dZ2=np.multiply(W3*dZ3,dacfun(Z2))
    dW2=dZ2*A1.T/m
    db2=np.sum(dZ2,axis=1,keepdims=True)   

    dZ1=np.multiply(W2*dZ2,dacfun(Z1))
    dW1=dZ1*A1.T/m
    db1=np.sum(dZ1,axis=1,keepdims=True)      

    # descent
    W1=W1-alpha*dW1
    b1=b1-alpha*db1

    W2=W2-alpha*dW2
    b2=b2-alpha*db2

    W3=W2-alpha*dW3
    b3=b2-alpha*db3 

    return W1,b1,W2,b2,W3,b3

该代码共分成5个部分,下面进行详解。

1.假定

考虑当前代码只是列出基本框架,并非直接运行,所以先假定所建立的神经网络模型为3层,各层的单元数分别为4,4,1

2.数据输入
trainningset=loaddata()  
X1=trainningset[:-1]
y=trainningset[-1]
m=len(y)

建立数据读取函数loaddata,将数据特征值和预测值统一读入,然后分别赋给不同变量

3.参数初始化
W1=np.random.randn((m,4))*0.01
W2=np.random.randn((4,4)))*0.01
W3=np.random.randn((4,1)))*0.01
b1=0
b2=0    
b3=0

考虑到这是个三层的神经网络,故一共6个参数,对于W需要初始化为接近于0的随机数,b可直接取0

4.前向传播
Z1=X1*w1+b1
A1=actfun(z1)

Z2=A1*w2+b2
A2=actfun(Z2)

Z3=A2*w2+b2
A3=actfun(Z3) 

这些公式已经是向量化之后的结果,也就是说每个变量中包含了样本的所有信息

Z表征的是前一层的输出结果进行线性组合

A是将Z值通过激活函数actfun计算后的输出值

actfun即激活函数,实际上考虑最后输出结果,最后一层输出层可先考虑为二元分类问题,其的激活函数应该为sigmoid函数,其它层可选取为Relu函数,但实际上可以根据情况选取

每层依次向前传递

5.后向传播-梯度下降

这一部分实际上可划分为计算梯度、参数下降两小部分。

dZ3=A3-y
dW3=dZ3*A2.T/m
db3=np.sum(dZ3,axis=1,keepdims=True)

dZ2=np.multiply(W3*dZ3,dacfun(Z2))
dW2=dZ2*A1.T/m
db2=np.sum(dZ2,axis=1,keepdims=True)   

dZ1=np.multiply(W2*dZ2,dacfun(Z1))
dW1=dZ1*A1.T/m
db1=np.sum(dZ1,axis=1,keepdims=True)   

这一小部分就是计算各个参数的偏导数,也就是所谓的梯度。
这里应该明确的是,我们的目标是最小化代价函数J

J=1mL(y^,y) J = 1 m ∑ L ( y ^ , y )

所以所求的梯度应该是J对各个参数的梯度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值