06 两层神经网络练习 - 神经网络和深度学习 [Deep Learning Specialization系列]

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

上一篇文章《05 两层神经网络 - 神经网络和深度学习 [Deep Learning Specialization系列]》讲了包含一层隐藏层的神经网络的一些原理和公式推导,这次就来以分类为例来做一个练习。

1. 库的引用

首先,本次练习会用到一个新的机器学习的Python库:Scikit-learn,该库会提供一些简单且高效的用于数据挖掘和数据分析的工具,具体可以参考Scikit-learn官网的介绍,里面也包含很多实例。

本次实验需要引入的库包括:

import numpy as np
import sklearn
import sklearn.datasets
import sklearn.linear_model
from planar_utils import sigmoid, load_planar_dataset

planar_utils模块包含该练习需要用到的数据加载以及sigmoid函数。其中,数据加载函数是生成一个花形的分成2类的数据集。

def load_planar_dataset():
    np.random.seed(1)
    m = 400 # number of examples
    N = int(m/2) # number of points per class
    D = 2 # dimensionality
    X = np.zeros((m,D)) # data matrix where each row is a single example
    Y = np.zeros((m,1), dtype='uint8') # labels vector (0 for red, 1 for blue)
    a = 4 # maximum ray of the flower

    for j in range(2):
        ix = range(N*j,N*(j+1))
        t = np.linspace(j*3.12,(j+1)*3.12,N) + np.random.randn(N)*0.2 # theta
        r = a*np.sin(4*t) + np.random.randn(N)*0.2 # radius
        X[ix] = np.c_[r*np.sin(t), r*np.cos(t)]
        Y[ix] = j
        
    X = X.T
    Y = Y.T

    return X, Y

数据加载只需调用该函数即可:X, Y = load_planar_dataset()

2. 神经网络模型

本练习使用的神经网络是包含一层隐藏层的2层神经网络,其中输入层是2个节点(因为我们是一个对二维数据进行分类的练习),隐藏层包含4个节点并使用tanh激活函数,输出层是用sigmoid函数。
具体的网络模型如下图所示:
分类神经网路模型
构建该神经网络的一般方法为:

  1. 定义神经网络的结构,包括输入层、隐藏层和输出层的节点数
  2. 初始化模型的参数
  3. 正向传播
  4. 计算损失函数或代价函数
  5. 反向传播
  6. 通过梯度递减法更新参数
  7. 构建完整模型(循环)

下面就来实现各个步骤。

2.1 神经网络的结构

这一步要做的非常简单,即根据输入数据以及定义好的隐藏层节点数来定义三个尺寸:输入层大小n_x、隐藏层大小n_h和输出层大小n_y

def layer_sizes(X, Y):
    n_x = X.shape[0] # size of input layer
    n_h = 4 # 自定义的大小,可以更改
    n_y = Y.shape[0] # size of output layer
    return (n_x, n_h, n_y)

2.2 初始化参数

在上一篇文章《05 两层神经网络 - 神经网络和深度学习 [Deep Learning Specialization系列]》的参数的初始化部分有提到:

在包含隐藏层的神经网络中,我们不能将参数初始化为0

因此,在对该神经网络进行初始化时,我们使用Numpy的随机数来定义参数w。对于各参数的维度,在上一篇文章中做了简单的说明,根据各层的计算公式:

  • z [ 1 ] ( i ) = W [ 1 ] x ( i ) + b [ 1 ] z^{[1] (i)} = W^{[1]} x^{(i)} + b^{[1]} z[1](i)=W[1]x(i)+b[1]
  • z [ 2 ] ( i ) = W [ 2 ] a [ 1 ] ( i ) + b [ 2 ] z^{[2] (i)} = W^{[2]} a^{[1] (i)} + b^{[2]} z[2](i)=W
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值