这是这门课程主要用到的numpy函数,即使你以前学过python也建议你能看看。这都在python 3下的jupyter notebook上运行的,如果你在python 2下运行,可能在后续内容得到与教程不一致的结果。我编写的目的是为了督促自己的学习,而且对于一些函数我是能多详细就多详细说明。
1 用numpy建立基础函数
1.1 sigmoid function,np.exp()
在使用numpy库中这些函数之前,我建议你熟悉一下关于python中广播的概念。这对于我们的学习帮助很大。
在课程中,我们知道sigmoid函数表达式为:sigmoid(x) = 。
首先,让我们用一个简单的exp()来理解广播:
接下来,让我们再用exp()来构造我们的sigmoid()函数:
1.2 Sigmoid gradient
正如视频课程中所看到的的,sigmoid函数梯度为
???????_??????????(?)=s′(?)=s(?)(1−s(?))
下面我们来实现这个梯度函数:
1.3 Reshaping arrays
这节我们学习np.reshape():
函数原型:np.reshape(a, newshape, order = ‘C’)
参数: 【a】要重新整型的数组
【newshape】是将a组成什么维度的数组,比如当值为(2,1)就是将a重组成2行1列的数组
【order】暂时不用考虑,在本课程中,通常用不到
例子:
我们也许会注意到np.reshape(a,(2,-1)),这表明我只想将a重组成2行,列数不想知道(计算机会自行算出列数)的数组。
1.4 Normalizing rows
现在让我们来看看numpy库中的linalg.norm()函数:
函数原型:x_norm = np.linalg.norm(x,ord = None, axis = None,keepdims = False)
参数:【x】表示要求范数的矩阵或向量
【ord】表示范数的类型,如下表所示:
向量的范数:
矩阵的范数:
ord =1: 列和的最大值
ord =2: |λ-|=0,求特征值,然后求最大特征值的算数平方根
ord =∞: 行和的最大值
【axis】axis = 1:表示按行向量处理,求多个行向量的范数
axis = 0:表示按列向量处理,求多个列向量的范数
axis = None:表示矩阵范数
【keepding】是否保持矩阵的二维特性
例子:
1.5 Broadcasting and the softmax function
从视频教程中可知:softmax(x) =
下面我们来实现这个函数:
2 Vectorization
在深度学习中,由于经常需要处理大量的数据,所以向量化的运算是十分必要的,
下面我们来比较一下使用向量化和使用for函数的效率:
‘’
由以上程序可发现,使用向量化的操作的确可以大幅度提高计算效率,并且句式清晰明了
2.1 Implement the L1 and L2 loss functions
损失用于评估模型的性能。您的损失越大,您的预测(?)与真实值(?)的差异就越大。
在深度学习中,您使用Gradient Descent等优化算法来训练您的模型并最大限度地降低成本。
(1)首先,让我们实现L1损失的numpy矢量化版本。
您可能会发现函数abs(x)(x的绝对值)很有用。
本节中L1 损失函数定义为:
=
-
|
接来下让我们来实现L1损失函数:
(2)现在,让我们实现L2丢失的numpy向量化版本。
有几种实现L2丢失的方法,但你可能会发现函数np.dot()很有用。
本节中L2 损失函数定义为:
=
-
接来下让我们来实现L2损失函数:
3 squezze函数的理解
从数组的形状中删除单维度,如下列代码所示:
import numpy as np
x = np.array([[[0], [1], [2]]])
print(x)
"""
x=
[[[0]
[1]
[2]]]
"""
print(x.shape) # (1, 3, 1)
x1 = np.squeeze(x)
print(x1) # [0 1 2] #此时只剩下维度为3的条目
print(x1.shape) # (3,)
再如: