深度学习DeepLearning.ai系列课程学习总结:4. Logistic代码实战
来源:互联网 发布:淘宝购物的金钱过程 编辑:程序博客网 时间:2024/06/17 09:09
转载过程中,图片丢失,代码显示错乱。
为了更好的学习内容,请访问原创版本:
http://www.missshi.cn/api/view/blog/59aa08fee519f50d04000170
Ps:初次访问由于js文件较大,请耐心等候(8s左右)
本节课中,我们将学习如何利用Python的来Logistic。
这是第一节Python代码内容,接下来我们将从一些基本的Python编程开始讲述。
使用numpy构建基本函数
numpy是Python在科学计算中最常用的库。接下来我们将要学习一些numpy中包含的常用函数。
练习1:利用np.exp()实现sigmod函数:
在利用np.exp()函数之前,我们首先使用math.exp()函数来实现sigmod函数,并将二者对比来突出np.exp()的优点。
其中,
上述描述了如何对一个标量执行sigmod函数,而在深度学习的应用中,我们通过是对向量或者矩阵来执行sigmod运算。
如何执行将该函数用于矢量或者矩阵,那么系统会抛出异常:
而如果使用的是np.exp函数的话,如果输入的是一个矢量或者矩阵,那么对应的输出也会是矢量或矩阵,即针对每个元素进行指数计算。
此外,对于numpy array类型的变量,其加减乘除的方法也统一被改写。
以下面的例子为例:
接下来,我们来实现一个真正的、可用于矢量或矩阵的sigmod函数:
其需求如下:
练习2:计算sigmod函数的导数
在之前的理论课程中,我们学习到了sigmod函数的导数公式如下:
接下来,我们通过Python代码进行实现:
练习3:将一副图像转为为一个向量
在numpy中,有两个常用的函数:np.shape和np.reshape()。
其中,X.shape可以用于查看当前矩阵的维度。
X.reshape()可以用于修改矩阵的维度或形状。
例如,对于一副彩色图像,其通常是由一个三维矩阵组成的(RGB三个通道)。然而,在深度学习的应用中,我们通常需要将其转换为一个矢量,其长度为3*length*width。
即我们需要将一个三维的矩阵转换为一个一维的向量。
接下来,我们需要实现一个image2vector函数,其输入为一个三维矩阵(length, height, 3),输出为一个矢量。
练习4:按行归一化
在深度学习中,常用的一个技巧是需要对我们的数据进行归一化。
通过,在对数据进行归一化后,梯度下降算法的收敛速度会明显加快。
接下来,我们需要对一个矩阵进行按行归一化,归一化后的结果是每一个的长度为1。
例如:
在上面的代码中,我们利用了广播的特性,接下来我们主要学习一下广播的使用。
练习5:广播的使用及softmax函数的实现
广播是numpy中一个非常强大的功能,它可以帮助我们对不同维度的矩阵、向量、标量之前快速计算。
接下来,我们需要实现一个softmax函数,其定义如下:
矢量化
在深度学习中,我们通常会处理大数据量的数据集。
因此=,计算速度可能会成为整个训练过程中的瓶颈。
为了保证我们计算的效率,我们需要对进行过程矢量化。
接下来,我们对比一下是否使用矢量化对于点乘、外积和按元素相乘等操作来说,计算效率的比较。
首先,利用原生方法的实现过程如下:
接下来,利用矢量化实现的结果如下:
从上述结果中,我们可以看到矢量化的代码明显简单了很多。
同时,运行时间也有了一定程度的降低。降低的幅度不大主要是由于数据量较小的原因,随着数据量的增大,减小的幅度也会越来越明显。
练习1:L1误差函数的实现
我们需要使用numpy函数来实现L1误差函数:
其中,L1误差函数的定义如下:
^y表示估计值,y表示真实值。
练习2:L2误差函数的实现
L2误差函数的定义如下:
Logistic的实现
接下来的内容中,我们将实现一个完成Logistic函数。包括:初始化、计算代价函数和梯度、使用梯度下降算法进行优化等并把他们整合成为一个函数。
本实验用于通过训练来判断一副图像是否为猫。
在这个过程中,我们将会用到如下库:
numpy:Python科学计算中最重要的库
h5py:Python与H5文件交互的库
mathplotlib:Python画图的库
PIL:Python图像相关的库
scipy:Python科学计算相关的库
在程序的开头,我们首先需要引入相关的库:
在训练之前,首先需要读取数据,读取数据的代码如下:
数据说明:
对于训练集的标签而言,对于猫,标记为1,否则标记为0。
每一个图像的维度都是(num_px, num_px, 3),其中,长宽相同,3表示是RGB图像。
train_set_x_orig和test_set_x_orig中,包含_orig是由于我们稍候需要对图像进行预处理,预处理后的变量将会命名为train_set_x和train_set_y。
train_set_x_orig中的每一个元素对于这一副图像,我们可以用如下代码将图像显示出来:
接下来,我们需要根据图像集来计算出训练集的大小、测试集的大小以及图片的大小:
接下来,我们需要对将每幅图像转为一个矢量,即矩阵的一列。
最终,整个训练集将会转为一个矩阵,其中包括num_px*numpy*3行,m_train列。
Ps:其中X_flatten = X.reshape(X.shape[0], -1).T可以将一个维度为(a,b,c,d)的矩阵转换为一个维度为(b∗∗c∗∗d, a)的矩阵。
接下来,我们需要对图像值进行归一化。
由于图像的原始值在0到255之间,最简单的方式是直接除以255即可。
接下来,我们来看一下Logistic的结构:
对于每个训练样本x,其误差函数的计算方式如下:
而整体的代价函数计算如下:
接下来,我们将按照如下步骤来实现Logistic:
1. 定义模型结构
2. 初始化模型参数
3. 循环
3.1 前向传播
3.2 反向传递
3.3 更新参数
4. 整合成为一个完整的模型
Step1:实现sigmod函数
Step2:初始化参数
Step3:前向传播与反向传播
Ps:计算公式如下:(具体计算公式来源请查看之前的理论课)
Step4:更新参数
更新参数的公式如下:
完整代码如下:
Step5:利用训练好的模型对测试集进行预测:
计算公式如下:
当输入大于0.5时,我们认为其预测认为结果是猫,否则不是猫。
Step5:将以上功能整合到一个模型中:
测试一下该模型吧:
此时,观察打印结果,我们可以发现我们的测试准确率已经可以达到70.0%。
而对于训练集,其准确性达到了99%。这表明了我们的模型有着一定的过拟合,不过不要着急,我们会在后续的内容中来解决这一问题。
使用如下代码,我们可以挑选其中的一些图片来看我们的预测结果:
此外,我们还可以画出我们的代价函数变化曲线:
之前的理论课程中,我们已经提及过学习速率对于最终的结果有着较大影响,现在,我们来用实验让大家有一个直观的了解。
分析:不同的学习速率会导致不同的预测结果。较小的学习速度收敛速度较慢,而过大的学习速度可能导致震荡或无法收敛。
如果你希望用一副你自己的图像,而不是训练集或测试集中的图像,那么该如何实现呢?
更多更详细的内容,请访问原创网站:
http://www.missshi.cn/api/view/blog/59aa08fee519f50d04000170
Ps:初次访问由于js文件较大,请耐心等候(8s左右)
- 深度学习DeepLearning.ai系列课程学习总结:4. Logistic代码实战
- 深度学习DeepLearning.ai系列课程学习总结:8. 多层神经网络代码实战
- 深度学习DeepLearning.ai系列课程学习总结:课程概述
- 深度学习DeepLearning.ai系列课程学习总结:6. 具有一个隐藏层的平面数据分类代码实战
- 深度学习DeepLearning.ai系列课程学习总结:10. 初始化、正则化、梯度检查实战
- 深度学习DeepLearning.ai系列课程学习总结:12. 优化算法实战
- 深度学习DeepLearning.ai系列课程学习总结:1. 深度学习简介
- 深度学习DeepLearning.ai系列课程学习总结:9.深度学习基础实践理论
- 深度学习DeepLearning.ai系列课程学习总结:2. 神经网络基础
- 深度学习DeepLearning.ai系列课程学习总结:3. Python矢量化实现神经网络
- 深度学习DeepLearning.ai系列课程学习总结:5. 浅层神经网络
- 深度学习DeepLearning.ai系列课程学习总结:14. Tensorflow入门
- 深度学习DeepLearning.ai系列课程学习总结:7. 深层神经网络理论学习
- 深度学习DeepLearning.ai系列课程学习总结:11. 优化算法理论讲解
- 深度学习课程项目Deeplearning.ai正式发布
- 【备忘】深度学习实战决胜AI-强化学习实战系列视频课程
- 吴恩达深度学习课程deeplearning.ai课程作业:Class 1 Week 2 assignment2_1
- 吴恩达深度学习课程deeplearning.ai课程作业:Class 1 Week 2 assignment2_2
- 剖析Python3相对于2版本以后的主要变化
- Linux用户空间与内核地址空间
- 消除table表格中td之间的距离
- Hibernate-Configuration:配置对象
- 实验4 [bx]和loop的使用
- 深度学习DeepLearning.ai系列课程学习总结:4. Logistic代码实战
- 如何使用泛型和索引器实现集合类List
- 消息中间件核心实体(0)
- 超详细git教程 GitHub创建管理仓库教程
- 招对合适的网络营销推广人才
- HDU 4757 Tree 可持久化trie+lca
- Qt 第6章 布局管理(3) 切分布局管理 学习笔记
- 面试题(1)
- 2017年9月2日普级组T1 正方形