练习

  • 神经网络与深度学习
    • 神经网络基础
      • Numpy基础
        • 1-使用numpy构建基本函数

神经网络与深度学习

神经网络基础

Numpy基础

学习目标:

  1. 使用numpy,包括函数调用及向量矩阵运算
  2. 广播
  3. 向量化代码

1-使用numpy构建基本函数

1.1- sigmoid function和np.exp()
在使用np.exp()之前,你将使用math.exp()实现Sigmoid函数。然后,你将知道为什么np.exp()比math.exp()更可取。

练习:构建一个返回实数x的sigmoid的函数。将math.exp(x)用于指数函数。

提示:
有时也称
为逻辑函数。它是一种非线性函数,即可用于机器学习(逻辑回归),也能用于深度学习。

要引用特定程序包的函数,可以使用package_name.function()对其进行调用。运行下面的代码查看带有math.exp()的示例。

但是在深度学习中很少使用math库,是因为在深度学习中更多的使用矩阵与向量,故numpy更加实用

import math
def basic_sigmoid(x):s = 1/(1 + math.exp(-x))return s
basic_sigmoid(3)

0.9525741268224334

import numpy as np
x = np.array([1,2,3])
print(1 / (1 + np.exp(-x)))

[0.73105858 0.88079708 0.95257413]

import numpy as np
def sigmoid(x):s = 1/(1 + np.exp(-x))return s
x = np.array([1,2,3])
sigmoid(x)

array([0.73105858, 0.88079708, 0.95257413])

1.2- Sigmoid gradient
正如你在教程中所看到的,我们需要计算梯度来使用反向传播优化损失函数。 让我们开始编写第一个梯度函数吧。

练习:创建函数sigmoid_grad()计算sigmoid函数相对于其输入x的梯度。 公式为:

我们通常分两步编写此函数代码:
1.将s设为x的sigmoid。 你可能会发现sigmoid(x)函数很方便。
2.计算

def sigmoid_derivative(x):s = sigmoid(x)ds = s * (1 - s)return ds
x = np.array([1,2,3])
sigmoid_derivative(x)

array([0.19661193, 0.10499359, 0.04517666])

1.3- 重塑数组
深度学习中两个常用的numpy函数是np.shape和np.reshape()。
-X.shape用于获取矩阵/向量X的shape(维度)。
-X.reshape(…)用于将X重塑为其他尺寸。

例如,在计算机科学中,图像由shape为

的3D数组表示。但是,当你读取图像作为算法的输入时,会将其转换为维度为
的向量。换句话说,将3D阵列“展开”或重塑为1D向量
练习:实现image2vector() ,该输入采用维度为(length, height, 3)的输入,并返回维度为(lengthheight3, 1)的向量。例如,如果你想将形为(a,b,c)的数组v重塑为维度为(a*b, 3)的向量,则可以执行以下操作:
v = v.reshape((v.shape[0]*v.shape[1], v.shape[2]))
#v.shape[0] = a ; v.shape[1] = b ; v.shape[2] = c

def image2vector(image):v = image.reshape(image.shape[0] * image.shape[1] * image.shape[2], 1)return v
image = np.array([[[ 0.67826139,  0.29380381],[ 0.90714982,  0.52835647],[ 0.4215251 ,  0.45017551]],[[ 0.92814219,  0.96677647],[ 0.85304703,  0.52351845],[ 0.19981397,  0.27417313]],[[ 0.60659855,  0.00533165],[ 0.10820313,  0.49978937],[ 0.34144279,  0.94630077]]])print ("image2vector(image) = " + str(image2vector(image)))

image2vector(image) = [[0.67826139]
[0.29380381]
[0.90714982]
[0.52835647]
[0.4215251 ]
[0.45017551]
[0.92814219]
[0.96677647]
[0.85304703]
[0.52351845]
[0.19981397]
[0.27417313]
[0.60659855]
[0.00533165]
[0.10820313]
[0.49978937]
[0.34144279]
[0.94630077]]

1.4- 行标准化
我们在机器学习和深度学习中使用的另一种常见技术是对数据进行标准化。 由于归一化后梯度下降的收敛速度更快,通常会表现出更好的效果。 通过归一化,也就是将x更改为(将x的每个行向量除以其范数)。(化为单位向量)

练习: 执行 normalizeRows()来标准化矩阵的行。 将此函数应用于输入矩阵x之后,x的每一行应为单位长度(即长度为1)向量。

def normalizeRows(x):x_norm = np.linalg.norm(x, axis = 1, keepdims = True)x = x / x_normreturn x
x = np.array([[0, 3, 4],[10, 12, 13]])
print("normalizeRows(x) = " + str(normalizeRows(x)))

normalizeRows(x) = [[0. 0.6 0.8 ]
[0.49206783 0.5904814 0.63968818]]

行标准化: x_norm = np.linalg.norm(x, axis = 1, keepdims = True)
x = x / x_norm

1.5- 广播和softmax函数
练习: 使用numpy实现softmax函数。 你可以将softmax理解为算法需要对两个或多个类进行分类时使用的标准化函数。 你将在本专业的第二门课中了解有关softmax的更多信息。
操作指南:

#首先算出每行元素之和(得n行1列矩阵),再将原矩阵与该矩阵相除
def softmax(x):xExp = np.exp(x)xSum = np.sum(xExp, axis = 1, keepdims = True)s = xExp / xSumreturn s
x = np.array([[9, 2, 5, 0, 0],[7, 5, 0, 0 ,0]])
print("softmax(x) = " + str(softmax(x)))

总结:

  1. -np.exp(x)适用于任何np.array x并将指数函数应用于每个坐标
  2. sigmoid函数及其梯度
  3. image2vector通常用于深度学习
  4. np.reshape被广泛使用。 保持矩阵/向量尺寸不变有助于我们消除许多错误。
  5. numpy具有高效的内置功能
  6. broadcasting非常有用

2-向量化
2.1实现L1和L2损失函数
练习: 实现L1损失函数的Numpy向量化版本。 我们会发现函数abs(x)(x的绝对值)很有用

提示:
-损失函数用于评估模型的性能。 损失越大,预测(
) 与真实值()的差异也就越大。 在深度学习中,我们使用诸如Gradient Descent之类的优化算法来训练模型并最大程度地降低成本。
-L1损失函数定义为

吴恩达 深度学习 2021版 作业相关推荐

  1. 吴恩达深度学习课后编程作业IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and i

    吴恩达深度学习课后编程作业出现的错误 IndexError: only integers, slices (" : "), ellipsis ("-"), nu ...

  2. 《吴恩达深度学习》编程作业-第二周

    目录 1.题目:基于神经网络思维模式的逻辑回归 2.声明 3.知识回顾 4.Python编程分析 4.1.导入需要用的库 4.2.数据处理 4.2.1.读取数据(包括训练集和测试集) 4.2.2.取出 ...

  3. 【吴恩达深度学习week4编程作业】

    本文参考该播主实现,需要的文件在博主的文章里:https://blog.csdn.net/u013733326/article/details/79767169 这次我先记录我自己打代码时候的错误,最 ...

  4. github标星8331+:吴恩达深度学习课程资源(完整笔记、中英文字幕视频、python作业,提供百度云镜像!)...

    吴恩达老师的深度学习课程(deeplearning.ai),可以说是深度学习入门的最热门课程,我和志愿者编写了这门课的笔记,并在github开源,star数达到8331+,曾经有相关报道文章.为解决g ...

  5. 360题带你走进深度学习!吴恩达深度学习课程测试题中英对照版发布

    吴恩达的深度学习课程(deepLearning.ai)是公认的入门深度学习的宝典,本站将课程的课后测试题进行了翻译,建议初学者学习.所有题目都翻译完毕,适合英文不好的同学学习. 主要翻译者:黄海广 内 ...

  6. 神经网络隐藏层个数怎么确定_含有一个隐藏层的神经网络对平面数据分类python实现(吴恩达深度学习课程1第3周作业)...

    含有一个隐藏层的神经网络对平面数据分类python实现(吴恩达深度学习课程1第3周作业): ''' 题目: 建立只有一个隐藏层的神经网络, 对于给定的一个类似于花朵的图案数据, 里面有红色(y=0)和 ...

  7. 吴恩达深度学习作业(week2)-(1)

    出发 作业地址https://github.com/robbertliu/deeplearning.ai-andrewNG 视频,bilibili吴恩达深度学习. 推荐食用方式 def basic_s ...

  8. 吴恩达深度学习-Course4第三周作业 yolo.h5文件读取错误解决方法

    这个yolo.h5文件走了不少弯路呐,不过最后终于搞好了,现在把最详细的脱坑过程记录下来,希望小伙伴们少走些弯路. 最初的代码是从下面这个大佬博主的百度网盘下载的,但是h5文件无法读取.(22条消息) ...

  9. 免费分享全套吴恩达深度学习课程笔记以及编程作业集合

    分享吴恩达深度学习全套 笔记 笔记来源于吴恩达老师课程中口述翻译,并包含板书.可以取代看视频,做到更快速学习. (部分目录) (部分目录) (板书) 编程作业 扫描二维码后台回复"0&quo ...

  10. 吴恩达深度学习第二周--logistic回归作业1

    吴恩达深度学习第二周–logistic回归作业1 本系列为吴恩达老师深度学习作业的总结,其中参考了很多优秀的文章,本文为了方便日后的复习与巩固,更为详细的作业讲解参考 目录 吴恩达深度学习第二周--l ...

最新文章

  1. 为什么程序员都不喜欢使用 switch ,而是大量的 if……else if ?
  2. 咏南LINUX中间件
  3. mysql自增长2个增加_mysql – 添加第二个自动增量字段并允许重复
  4. 二、传统数据库遇到的挑战
  5. Spring AOP里面的几个名词
  6. thinkphp3.1的新功能
  7. 电气期刊论文实现:二进制遗传算法求解考虑输电损耗的负荷最优分配【经济调度,有代码】
  8. Hadoop系列之五:MapReduce进阶(2)
  9. 2M口,电口,光口的区别
  10. 【数据结构】顺序线性表的几种常用方法
  11. python画三色柱状图_python画手绘图
  12. 超参数调优方法整理大全
  13. RPLIDAR思岚雷达学习记录--6--matlab处理雷达数据
  14. python日期间隔天数_Python编程题5--计算两个日期之间相隔的天数
  15. Log4j2日志记录框架的使用教程与简单实例
  16. 聊聊CVE漏洞编号和正式公开那些事
  17. TCP的三次握手和四次挥手
  18. 机器学习模型可解释性进行到底 —— SHAP值理论(一)
  19. 在outlook中批量导入MSG文件
  20. 计算机设计大赛感言,计算机编程比赛获奖感言.doc

热门文章

  1. IOUtils快速进行内容复制与常用方法
  2. 关于人人开源的权限问题
  3. java map 遍历取值_遍历 MAP 集合取值方式
  4. linux,内核(kernel)对AD9371配置流程。
  5. MOOC 研究生学术与职业素养 课后答案
  6. 利用WireShark破解网站密码
  7. SVNAdmin - 好用的开源SVN管理系统
  8. Linux线程的终止
  9. EEGLAB使用流程
  10. 高等数学 下册 第九章 偏导数 笔记