2.12 向量化更多例子-深度学习-Stanford吴恩达教授

文章讲述了向量化技术如何提高代码效率,特别是在矩阵运算和逻辑回归的梯度下降中。通过避免显式for循环,利用numpy内置函数进行向量化计算,例如矩阵乘法和向量指数运算,可以显著提升程序运行速度。在逻辑回归的梯度下降实现中,可以简化两层循环为一层,加速训练过程。
摘要由CSDN通过智能技术生成

向量化更多例子 (More Vectorization Examples)

从上节视频中,你知道了怎样通过numpy内置函数和避开显式的循环(loop)的方式进行向量化,从而有效提高代码速度。

下面来看更多例子。需要记住的经验之谈:当你在编写神经网络或逻辑回归时,都要尽可能避免使用显式的for循环,虽然有时候完全无法避免使用for循环,但如果你能使用内置函数,这通常会比直接使用for循环更快。

让我们看另外一个例子。如果你想计算向量 u = A\cdot v,即u是由矩阵A乘以v而得。根据矩阵乘法定义:u_{i} = \sum_{j}^{}A_{ij}v_{j}    。因此实现非向量化的代码如下:

# 非向量化的实现方式
u = np.zeros(n,1)
# 用两层for循环计算向量u(根据矩阵乘法法则),遍历i,j
for i ...:
    for j ...:
        u[i] += A[i][j] * v[j]

对比,下面是向量化的实现,消除了两层for循环:

# 向量化实现
u = np.dot(A,v)

 

下面通过另一个例子继续了解向量化。假设你在内存中已经有一个向量v,你想要对向量v中的每个元素进行指数运算,下面如图展示了非向量化,对比向量化的方法:

 实际上,Python和Numpy中由很多内置函数,只需调用一个函数就可以完成这些向量的计算。所以当想写for循环的时候,先看看能不能通过调用Numpy中内置函数避免for循环。

那么,将刚才所学到的内容,运用在逻辑回归的梯度下降上,看看我们是否能简化两个for循环过程中的某一步。

 在这例子我们有n个特征值,如果你有超过两个特征时,需要循环dw_{1},dw_{2},dw_{3}等等,所以j的实际值1,2,......,n_{x}

下面我们想要消除第二个循环,在第一行,这样我们就不显示的初始化dw_{1},dw_{2},把它们定义成向量dw,设置u = np.zeros(n_{x},1) 。接着去掉对单个元素使用for循环,并使用向量的计算 dw += x^{(i)}dz^{(i)} 。最后,使用 dw /= m 。现在我们通过将两层循环转成一层循环。

希望这个视频给了你一点向量化感觉,减少一层循环会使你代码更快,但事实上我们能做得更好。所以在下个视频,我们将进一步的讲解逻辑回归进行向量化,你将会看到更好的监督学习结果。在训练中不需要使用任何 for 循环,你也可以写出代码去运行整个训练集。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值