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


←上一篇↓↑下一篇→
2.11 向量化回到目录2.13 向量化 Logistic 回归

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

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

经验提醒我,当我们在写神经网络程序时,或者在写逻辑(logistic)回归,或者其他神经网络模型时,应该避免写循环(loop)语句。虽然有时写循环(loop)是不可避免的,但是我们可以使用比如numpy的内置函数或者其他办法去计算。当你这样使用后,程序效率总是快于循环(loop)。

让我们看另外一个例子。如果你想计算向量 u = A v u=Av u=Av ,这时矩阵乘法定义为,矩阵乘法的定义就是: u i = ∑ j A i j v i u_i=\sum_jA_{ij}v_i ui=jAijvi ,这取决于你怎么定义 u i u_i ui 值。同样使用非向量化实现, u = n p . z e r o s ( n , 1 ) u=np.zeros(n,1) u=np.zeros(n,1) , 并且通过两层循环 f o r ( i ) : f o r ( j ) : for(i):for(j): for(i):for(j): ,得到 u [ i ] = u [ i ] + A [ i ] [ j ] ∗ v [ j ] u[i]=u[i]+A[i][j]*v[j] u[i]=u[i]+A[i][j]v[j] 。现在就有了 i i i j j j 的两层循环,这就是非向量化。向量化方式就可以用 u = n p . d o t ( A , v ) u=np.dot(A,v) u=np.dot(A,v) ,右边这种向量化实现方式,消除了两层循环使得代码运行速度更快。

在这里插入图片描述

下面通过另一个例子继续了解向量化。如果你已经有一个向量 v v v ,并且想要对向量 v v v 的每个元素做指数操作,得到向量 u u u 等于 e e e v 1 v_1 v1 e e e v 2 v_2 v2 ,一直到 e e e v n v_n vn 次方。这里是非向量化的实现方式,首先你初始化了向量 u = n p . z e r o s ( n , 1 ) u=np.zeros(n,1) u=np.zeros(n,1) ,并且通过循环依次计算每个元素。但事实证明可以通过pythonnumpy内置函数,帮助你计算这样的单个函数。所以我会引入import numpy as np,执行 u = n p . e x p ( v ) u=np.exp(v) u=np.exp(v) 命令。注意到,在之前有循环的代码中,这里仅用了一行代码,向量 v v v 作为输入, u u u 作为输出。你已经知道为什么需要循环,并且通过右边代码实现,效率会明显的快于循环方式。

事实上,numpy库有很多向量函数。比如 u=np.log是计算对数函数( l o g log log)、 np.abs() 是计算数据的绝对值、np.maximum() 计算元素 y y y 中的最大值,你也可以 np.maximum(v,0) v ∗ ∗ 2 v**2 v2 代表获得元素 y y y 每个值得平方、 1 v \frac1v v1 获取元素 y y y 的倒数等等。所以当你想写循环时候,检查numpy是否存在类似的内置函数,从而避免使用循环(loop)方式。

在这里插入图片描述

那么,将刚才所学到的内容,运用在逻辑回归的梯度下降上,看看我们是否能简化两个计算过程中的某一步。这是我们逻辑回归的求导代码,有两层循环。在这例子我们有 n n n 个特征值。如果你有超过两个特征时,需要循环 d w 1 dw_1 dw1 d w 2 dw_2 dw2 d w 3 dw_3 dw3 等等。所以 j j j 的实际值是1、2 和 n x n_x nx ,就是你想要更新的值。所以我们想要消除第二循环,在这一行,这样我们就不用初始化 d w 1 dw_1 dw1 d w 2 dw_2 dw2 都等于0。去掉这些,而是定义 d w dw dw 为一个向量,设置 u = n p . z e r o s ( n ( x ) , 1 ) u=np.zeros(n(x),1) u=np.zeros(n(x),1) 。定义了一个 x x x 行的一维向量,从而替代循环。我们仅仅使用了一个向量操作 d w = d w + x ( i ) d z ( i ) dw=dw+x^{(i)}dz^{(i)} dw=dw+x(i)dz(i) 。最后,我们得到 d w = d w / m dw=dw/m dw=dw/m 。现在我们通过将两层循环转成一层循环,我们仍然还有这个循环训练样本。

在这里插入图片描述

在这里插入图片描述

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

课程PPT

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


←上一篇↓↑下一篇→
2.11 向量化回到目录2.13 向量化 Logistic 回归

  • 19
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhao-Jichao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值