吴恩达深度学习--向量化的更多例子

需要记住的经验之谈

       当你在编写神经网络或逻辑回归时,都要尽可能避免使用显示的for循环,有时候无法完全避免for循环,但如果能使用内置函数或其他方法来计算想要的答案,通常会比直接用for循环跟快

例子1:

       你想要计算向量U,它是矩阵A和向量V的乘积:

       根据矩阵乘法的定义:

非向量化的实现方法是;

这是一个两层的for循环,分别对i和j进行循环


向量化的实现方式是:

消除了两层for循环,运行速度要快的多

例子2:

假设在内存中已经有一个向量V,你想要对向量V中的每一个元素进行指数运算。

      首先初始化U为一个零向量,然后用一个for循环每次计算一个元素。

       但实际上python和mumpy中有很多内置函数,只需要调用一个函数就可以完成这些向量计算。


       原先的for循环语句在这里变成了一行代码输入为向量V,输出为向量U。右边的实现方式避免了使用显示的for循环,而且比直接使用for循环更快,实际上Numpy中有很多支持向量值的函数,比如np.log(V)会对向量中的每个元素进行对数计算。

       Np.maximum(v,0):与0相比求最大值。

       看看能否通过NumPy的内置函数本来避免for循环

       接下来让我们把这些知识运用到逻辑回归中的梯度下降算法实现中,看看是否可以至少摆脱两个for循环中的一个,这是我们计算逻辑回归中的导数的代码。

       接下来,我们要消灭这两个for循环,我们的做法是不再将dw1 dw2等显示的初始化为0,移除这一段,然后令dw成为一个向量。


但我们保留了这层针对各个训练样本的for循环

小结:本节给出一个向量化过程,通过移除一个for循环,代码会更快运行,在下一节进一步讨论如何对逻辑回归进行向量化,你会惊讶的看到一种没有for循环的实现方式,不需要对训练样本的for循环,代码几乎可以处理整个训练集。

你可能感兴趣的:(吴恩达深度学习--向量化的更多例子)