深度学习作业-第一课-第三周-编程作业(解决报错)

带有一个隐藏层的平面数据分类

python中的sklearn库是机器学习常用的第三方模块,对常用的机器学习模型都进行了封装。包括回归、降维、分类、聚类等
https://www.jianshu.com/p/6ada34655862
深度学习作业-第一课-第三周-编程作业(解决报错)_第1张图片
testCases提供了一些测试示例来评估函数的正确性
planar_utils提供了在这个任务中使用的各种有用的函数这个函数在另一个文件
np.random.seed(1)
这个代码的作用是你以后生成的随机数都是相同的。
首先下载数据集:
在这里插入图片描述
可视化:
在这里插入图片描述
在运行上述代码的时候会遇到:
ValueError: ‘c’ argument has 1 elements, which is not acceptable for use with ‘x’ with size 400, ‘y’ with size 400.
解决办法是:
在这里插入图片描述
并打开planar_utils.py这个文件也把相应的该部分进行更改
打印矩阵大小;
在这里插入图片描述
先看看逻辑回归如何解决这个问题的:
在进行逻辑回归的时候为了方便这里不再自己建立模型而是采用sklearn库
训练逻辑回归模型:
在这里插入图片描述
然后画出决策边界:

深度学习作业-第一课-第三周-编程作业(解决报错)_第2张图片
结果是:

在这里插入图片描述
深度学习作业-第一课-第三周-编程作业(解决报错)_第3张图片
看来逻辑回归的效果并不是很好
下面建立简单的神经网络看看效果:
建立一个只有一个隐藏层的神经网络,前向传播过程如下:(隐藏层使用的是tanh函数,输出层因为要进行二分类因此用sigmoid函数)
深度学习作业-第一课-第三周-编程作业(解决报错)_第4张图片
通常建立神经网络的步骤:
1.定义神经网络的结构
2.初始化模型参数
3.循环:
实行前向传播
计算代价
实现反向传播并获得梯度
利用梯度下降的方法进行更新参数

4.1 定义神经网络结构

定义下面变量:
n_x : 输入层大小
n_h: 隐藏层大小(设置为4)
n_y: 输出层大小

看一下变量大小:
深度学习作业-第一课-第三周-编程作业(解决报错)_第5张图片
深度学习作业-第一课-第三周-编程作业(解决报错)_第6张图片
输出结果是:

在这里插入图片描述
也就是说这个神经网络时输入特征x为5 ,只有一个隐藏层且隐藏层神经元为4,输出是一个二分类问题

4.2 初始化模型参数

初始化参数:

深度学习作业-第一课-第三周-编程作业(解决报错)_第7张图片
输入:
深度学习作业-第一课-第三周-编程作业(解决报错)_第8张图片
结果:
深度学习作业-第一课-第三周-编程作业(解决报错)_第9张图片

4.3 进行循环

首先实现前向传播计算Z1,A1,Z2,A2:
深度学习作业-第一课-第三周-编程作业(解决报错)_第10张图片
‘*’代表着矩阵对应元素相乘而dot则是矩阵相乘
上面是源代码,你运行的时候是会报错的因为取字典的时候应该是[]而不是()修改后:
深度学习作业-第一课-第三周-编程作业(解决报错)_第11张图片
运行:

深度学习作业-第一课-第三周-编程作业(解决报错)_第12张图片
第一行代码在testCases.py文件中
下面计算代价函数:
在这里插入图片描述
实现上述函数可以参考下面的代码:(不过建议用向量的形式来进行表达,以提高代码的运行速度,并且更加简便
在这里插入图片描述

好了先看看函数吧:
深度学习作业-第一课-第三周-编程作业(解决报错)_第13张图片
运行:
在这里插入图片描述
结果:
在这里插入图片描述
下面进行反向传播:
深度学习作业-第一课-第三周-编程作业(解决报错)_第14张图片
这里的dZ1 = np.dot(W2.T,dZ2) * (1-np.power(A1,2))的原因是tanh函数的导数就是1-(tanh的平方)
在这里插入图片描述
由于隐藏层用的函数就是tanh因此上面函数的g函数就是这个tanh(Z1)=A1
运行:
深度学习作业-第一课-第三周-编程作业(解决报错)_第15张图片
进行更新代价函数:
通过使用 (dW1, db1, dW2, db2)去更新(W1, b1, W2, b2)

使用下面的方式:
在这里插入图片描述
函数如下:

深度学习作业-第一课-第三周-编程作业(解决报错)_第16张图片
运行:
深度学习作业-第一课-第三周-编程作业(解决报错)_第17张图片

将上面的循环过程放在一个模型之中:
深度学习作业-第一课-第三周-编程作业(解决报错)_第18张图片

使用前向传播进行预测
预测:

深度学习作业-第一课-第三周-编程作业(解决报错)_第19张图片
predictions就是进行预测分类,如果A2>0.5则认为是1,否则认为是0.因此只需要用np.round()函数就可以了,这个函数是进行四舍五入。
运行:
深度学习作业-第一课-第三周-编程作业(解决报错)_第20张图片
结果:
在这里插入图片描述
建立一个隐藏层有四个单元的模型并画出决策边界:
深度学习作业-第一课-第三周-编程作业(解决报错)_第21张图片
打印准确率:
在这里插入图片描述
看看结果:
在这里插入图片描述
与逻辑回归的准确度相比高得多。

4.6 调整隐藏层的大小

下面试一下不同的隐藏层大小对结果的影响,这样我们就可选择更合适的隐藏层。
深度学习作业-第一课-第三周-编程作业(解决报错)_第22张图片
结果:
深度学习作业-第一课-第三周-编程作业(解决报错)_第23张图片

你可能感兴趣的:(深度学习作业笔记)