课后作业(二):如何用一个只有一层隐藏层的神经网络分类Planar data

来源:sandipanweb

编译:Bot

编者按:之前,论智曾在TOP 10:初学者需要掌握的10大机器学习(ML)算法介绍了一些基础算法及其思路,为了与该帖联动,我们特从机器学习热门课程HSE的Introduction to Deep Learning和吴恩达的Neural Networks and Deep Learning中挑选了一些题目,演示Python、TensorFlow和Keras在深度学习中的实战应用。

“课后作业”第二题如何用一个只有一层隐藏层的神经网络分类Planar data,来自吴恩达deeplearning.ai。注:本文所列代码都不是完整答案,请根据注释思路自行填空。

在这个任务中,我们需要从头开始训练一个单隐藏层神经网络,并和另一个由logistic算法训练的分类器对比差异。

我们的目标是:

实现一个只有一层隐藏层的二分类神经网络;

使用非线性激活函数,如tanh;

计算交叉熵损失;

实现前向传播和反向传播。

数据集

下图是我们要处理的“flower”二分类数据集,红蓝两种颜色表示两种不同的数据类型。训练样本大小m=400。

简单Logistic回归

在建立一个完整的神经网络前,我们先来看看Logistic回归在这个问题上的实现方法。我们可以直接用sklearn的内置函数来进行分类,输入以下代码在数据集上训练分类器:

在训练时,我们还需要绘制分类器的决策边界和输出准确率,这就意味着要在上述代码后加上以下内容:

Logistic回归准确率(正确标记数据点的百分比):47%。

注:由于这个数据集不是线性可分的,所以Logistic回归的表现不太好,47%的准确率太低了,希望神经网络能有更好的表现。

神经网络模型

由于Logistic回归效果不佳,所以我们要用python numpy从头搭建并训练一个只有一层隐藏层的神经网络。

根据吴老师的题设,我们的模型应该长这样:

而搭建神经网络的一般方法是:

定义神经网络结构(定义输入神经元、隐藏神经元,等等);

初始化模型参数;

Loop。

实现前向传播

计算损失

实现反向传播并获得梯度

更新参数(梯度下降)

定义神经网络结构

定义三个变量及layer_sizes函数,其中:

n_x:输入层节点(神经元、单元)数;

n_h:隐藏层节点数;

n_y:输出层节点数。

初始化模型参数

执行函数initialize_parameters()。

说明:

Loop

执行forward_propagation()。

说明:

请看上稳重模型图下方的数学算式;

使用sigmoid()函数;

使用np.tanh()函数,numpy库里有现成的;

必须进行的步骤:(1)用parameters[".."]从“parameters”中(initialize_parameters()的输出)中检索出所有参数;(2)实现前向传播,计算Z[1]、A[1]、Z[2]Z[1]、A[1]、Z[2]和A[2]A[2](数据集中所有样本的预测值的向量);

将反向传播所需的值存储在“cache”中,“cache”会被BP算法定义为一个输入。

执行compute_cost()计算损失值J(吴恩达喜欢把loss写成代价cost),这里有多种计算交叉熵损失的方法。

在进行前向传播期间,我们计算获得了一些值并缓存在“cache”中,现在它们可用来实现反向传播。

实现函数backward_propagation()

说明:反向传播通常是深度学习中最难(涉及大量数学计算)的部分,由于本文是习题解答,所以我们不会对它做详细介绍。下图是一张关于反向传播的课程幻灯片,我们会使用图片右侧的6个方程,来构建一个向量化的实现。

执行更新规则,进行梯度下降,我们必须用(dW1, db1, dW2, db2)来更新(W1, b1, W2, b2)。

一般梯度下降规则:θ = θ - α(∂J / ∂θ ),其中α为学习率,θ表示参数。

下图是Adam Harley制作的一张动图,显示梯度下降算法在不同学习率上的表现,其中有良好学习率时曲线收敛,反之则曲线发散。

nn_model()

建立神经网络模型nn_model(),并集成之前的成果。需要注意的一点是,这些分步进行的函数必须以正确的顺序放进模型中。

预测

用predict()来使模型进行预测,并用前向传播输出预测损失。

接下来就可以运行我们的神经网络模型了:

每隔1000次迭代输出的损失示例:

准确率:90%。

与Logistic回归相比,神经网络模型的准确率非常高,它精准区分了每片花瓣上数据的所属类别,证明它能学习高度非线性的决策边界。

调整隐藏层大小

之前我们示例的都是包含4个节点的隐藏层,让我们调整节点数量,具体看看模型的分类表现。

可以发现,在过拟合(20)出现之前,较大的模型(隐藏层包含更多节点)能更好地适应训练集,而在“flower”中表现最优的似乎是包含5个节点的模型,它的分类更合理,而且也没有出现过拟合。对于这个问题,我们可以用正则化(regularization)来减少大型模型的缺陷,比如实现一个性能良好的隐藏层中包含50个节点的神经网络模型。

本文来自企鹅号 - 全球大搜罗媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能

卷积神经网络之卷积操作

深度学习是一个目前非常火热的机器学习分支,而卷积神经网络(CNN)就是深度学习的一个代表性算法。CNN主要用来解决图像相关的问题,目前,单张图片的识别问题已基本...

20970
来自专栏算法channel

Python神经网络| 一篇很棒的实战笔记,附源码

感谢粉丝:疯琴,以下分享是疯琴在学习《Python神经网络》时的笔记,总结得很棒,感谢疯琴的乐于分享精神,相信这篇笔记一定会帮助到大家。

21730
来自专栏人工智能LeadAI

VGG和GoogLeNet inception

01 介绍 googlenet和vggnet这两个模型是在AlexNet后人工神经网络方面研究的又一里程碑,也是许多论文和博客中用来和提出的新方法进行对比的b...

397140
来自专栏weixuqin 的专栏

深度学习之 TensorFlow(四):卷积神经网络

37170
来自专栏老秦求学

决策树(ID3,C4.5,CART)原理以及实现

决策树是一种基本的分类和回归方法.决策树顾名思义,模型可以表示为树型结构,可以认为是if-then的集合,也可以认为是定义在特征空间与类空间上的条件概率分布.

17410
来自专栏机器学习、深度学习

统计学习导论 Chapter2--What Is Statistical Learning?

Book: An Introduction to Statistical Learning with Appli...

22180
来自专栏杨熹的专栏

为什么要用交叉验证

本文结构: 什么是交叉验证法? 为什么用交叉验证法? 主要有哪些方法?优缺点? 各方法应用举例? ---- 什么是交叉验证法? 它的基本思想就是将原始数据(da...

53440
来自专栏奇点大数据

卷积神经网络对图片分类-下

接上篇:卷积神经网络对图片分类-中 9 ReLU(Rectified Linear Units) Layers 在每个卷积层之后,会马上进入一个激励层,调用一种...

303120
来自专栏AI科技大本营的专栏

哪个才是解决回归问题的最佳算法?线性回归、神经网络还是随机森林?

编译 | AI科技大本营 参与 | 王珂凝 编辑 | 明 明 【AI科技大本营导读】现在,不管想解决什么类型的机器学习(ML)问题,都会有各种不同的算法可以供你...

62170
来自专栏人人都是极客

机器学习三要素之数据、模型、算法

我们都知道,机器学习需要大量的数据来训练模型,尤其是训练神经网络。在进行机器学习时,数据集一般会被划分为训练集和测试集,很多时候还会划分出验证集。

78020

扫码关注云+社区

领取腾讯云代金券