【吴恩达课后编程作业】Course 1 - 神经网络和深度学习 - 第三周作业

在开始之前,首先声明本文是作为一个初学者的学习笔记,在学习CSDN博主「何宽」的原创文章,原文链接:https://blog.csdn.net/u013733326/article/details/79702148 【【吴恩达课后编程作业】Course 1 - 神经网络和深度学习 - 第三周作业时,碰到一些问题,所以做了总结,方便自己之后碰到问题可以回头查阅。如有不妥的地方欢迎大家指正,如果大佬不喜欢我可以给他删掉。
——————————————————————————————————————————————————————————
大佬上传的的资料在百度网盘,提取码:qifu 。点此处下载:[百度网盘]。(https://pan.baidu.com/s/12VnFvaQf16J0RV1n1xsRvg&shfl=sharepset)
——————————————————————————————————————————————————————————
本次作业要做的目标内容:

构建具有单隐藏层的2类分类神经网络。
使用具有非线性激活功能激活函数,例如tanh。
计算交叉熵损失(损失函数)。
实现向前和向后传播。
——————————————————————————————————————————————————————————
准备软件包:

numpy:是用Python进行科学计算的基本软件包。
sklearn:为数据挖掘和数据分析提供的简单高效的工具。
matplotlib :是一个用于在Python中绘制图表的库。
testCases:提供了一些测试示例来评估函数的正确性,参见下载的资料。
planar_utils :提供了在这个任务中使用的各种有用的功能,参见下载的资料。

import numpy as np
import matplotlib.pyplot as plt
from testCases import *
import sklearn
import sklearn.datasets
import sklearn.linear_model
from planar_utils import plot_decision_boundary, sigmoid, load_planar_dataset, load_extra_datasets

np.random.seed(1)#准备一个随机数的种子

——————————————————————————————————————————————————————————
加载和查看数据集:

np.random.seed(1)#准备一个随机数的种子
#加载数据集
X, Y = load_planar_dataset()
#绘制可视化图像,X是2*n矩阵,y是颜色,s是数据的数量,cmap代表按照y不同,用不同颜色分开
plt.scatter(X[0, :] , X[1, :] , c = np.squeeze(Y) , s = 40 , cmap = plt.cm.Spectral)
plt.show()#老是忘记这一行,没有他看不到图啊

运行结果如下:
形状像花一样,根据Y值的不同,分为蓝色和红色两类
——————————————————————————————————————————————————————————
查看数据的大小:

shape_X = X.shape
shape_Y = Y.shape
m = Y.shape[1]

print ("X的维度为:" + str(shape_X))
print ("Y的维度为:" + str(shape_Y))
print ("数据集里面的数据有:" + str(m) + "个")

运行结果如下:

X的维度为:(2, 400)
Y的维度为:(1, 400)
数据集里面的数据有:400

——————————————————————————————————————————————————————————
查看简单的Logistic回归的分类效果:
使用sklearn的内置函数来做到这一点, 运行下面的代码来训练数据集上的逻辑回归分类器:

clf = sklearn.linear_model.LogisticRegressionCV()
clf.fit(X.T,Y.T)

会有如下显示:

d:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py:724: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
  y = column_or_1d(y, warn=True)
d:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_split.py:1978: FutureWarning: The default value of cv will change from 3 to 5 in version 0.22. Specify it explicitly to silence this warning.
  warnings.warn(CV_WARNING, FutureWarning)

我们可以把逻辑回归分类器的分类绘制出来:

#绘制决策边界 , 此处做了修改,将Y进行了向量化  lambda函数的功能就是实现一个  : 之前是输入   :  之后是输出的函数
plot_decision_boundary(lambda x: clf.predict(x), X, np.squeeze(Y)) 
plt.title("Logistic Regression") #图标题
plt.show()#别忘记显示一下
LR_predictions  = clf.predict(X.T) #预测结果
"""
    关于预测准确性的式子来源:
    首先LR_predictions是预测结果(只有0和1)
    np.dot(Y, LR_predictions)就是真实值Y与预测值的内积(每个元素相乘加起来)
    只有真实值和预测值都为1时,才有用,因为其他其他情况都为0,对结果没影响
    这个np.dot(Y, LR_predictions)就是预测正确并且结果是1的那部分
    
    同理np.dot(1 - Y,1 - LR_predictions)是预测正确并且结果是0的那部分
    
    最后加起来求和除以总的样本就是正确率

"""
print ("逻辑回归的准确性: %d " % float((np.dot(Y, LR_predictions) + 
		np.dot(1 - Y,1 - LR_predictions)) / float(Y.size) * 100) +
       "% " + "(正确标记的数据点所占的百分比)")

运行结果如下:
在这里插入图片描述

逻辑回归的准确性: 47 % (正确标记的数据点所占的百分比)

——————————————————————————————————————————————————————————
搭建神经网络:

构建神经网络的步骤:

定义神经网络结构(输入单元的数量,隐藏单元的数量等)。
初始化模型的参数
循环:

实施前向传播
计算损失
实现向后传播
更新参数(梯度下降)

我们要它们合并到一个nn_model() 函数中,当我们构建好了nn_model()并学习了正确的参数,我们就可以预测新的数据。

1、定义神经网络结构

n_x: 输入层的数量
n_h: 隐藏层的数量(这里设置为4)
n_y: 输出层的数量

def layer_sizes(X , Y):
    """
        参数:
          X - 输入数据集,维度为n_x * m
          Y - 标签,维度为  1 * m
        返回:
          n_x - 输入层的数量
          n_h - 隐藏层的数量
          n_y - 输出层的数量
    """
    n_x = X.shape[0]
    n_h = 4
    n_y = Y.shape[0]
    
    return (n_x , n_h , n_y)

进行测试:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值