【吴恩达Deep Learning】初学者学习记录1(向量化/logistic回归计算)

1.向量化的好处

首先进行一个简单的代码验证:

import numpy as np
import time

a = np.random.randn(1000000)
b = np.random.randn(1000000)

tic = time.time()
c = np.dot(a,b)
toc = time.time()

print(c)
print("Vectorized version:" + str(1000*(toc-tic)) + "ms") # 向量化的计算

c1 = 0
tic1 = time.time()
for i in range(1000000):
    c1 += a[i] * b[i]
toc1 = time.time()

print(c1)
print("For loop:" + str(1000*(toc1-tic1)) + "ms") # 非向量化的计算

运行后得到的值:

显而易见,计算相同值的时候,向量化版本的计算所需要的时间远远低于非向量化版本的时间

因此我们在设计代码的时候,遇到for循环语句的相关代码,不妨先找找python-numpy库中是否有能够代替的

简单介绍一下c += a(i) * b(i),即c = c + a(i) * b(i) -= , /= ,*=同理(因为我一开始不知道hhh)

2.python中的部分广播

广播是python中的一种手段,可以让代码运行的更加快

用Python中的数组相加举例:

[1,2,3]                               [101,102,103]                    [1]      [100,100,100]    [101,101,101]

[2,3,4] + [100,100,100] =  [102,103,104]                    [2] +   [100,100,100] = [102,102,102]

[3,4,5]                               [103,104,105]                    [3]      [100,100,100]    [103,103,103]

大致为(m,n)的矩阵+-*/(1,n)python就会自动复制m次来使矩阵一一对应

例:

import numpy as np

A = np.array([[56.0,0.0,4.4,68.0],
              [1.2,104.0,52.0,8.0],
              [1.8,135.0,99.0,0.9]])

cal = A.sum(axis=0) # axis=0 为纵向相加,axis=1 为横向相加

percentage = 100*A/cal #亦可以= 100*A/cal.reshape(1,4)  不用reshape也是可以的

print(percentage)

虽然如此,但我们可以在代码中使用reshape来确保矩阵形状是自己想要的

3.向量化logistic回归的梯度输出

如图,按照右侧计算,我们就进行了一次没有用for循环的回归梯度下降的迭代了

小结:

在进行学习中不断进行汇总和将内容写到博客上也是一种高效的记忆方式,并可以时常回顾。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值