2.9针对单个样本的反向传播中的导数计算
2.10 针对m个样本的梯度下降
2.11 向量化(vectorization)
关于向量化的作用,可以参见下面的例子,直观而形象的看出向量化能够节省运算时间的开销
import numpy as np
import time
a=np.random.rand(1000000)
b =np.random.rand(1000000)
tic=time.time()
c=np.dot(a,b)
toc=time.time()
print(c)
print("vectorized version:"+str(1000*(toc-tic))+"ms")#向量化的版本运算,利用python的内置函数np.dot()
c=0
tic=time.time()
for i in range(1000000):
c+=a[i]*b[i]
toc=time.time()
print(c)
print("for loop:"+str(1000*(toc-tic))+"ms")#非向量化版本,即利用for loop进行进行计算。
结果:
249644.0074125242
vectorized version:8.005380630493164ms
249644.0074125196
for loop:1472.203016281128ms
2.12举出三个向量化的例子
2.13向量化计算正向传播
2.14 介绍向量化的后向传播以及整个Logistics Regression 的向量化程序
2.15 python中的broadcasting
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]])
print(A)
结果为:
[[ 56. 0. 4.4 68. ]
[ 1.2 104. 52. 8. ]
[ 1.8 135. 99. 0.9]]
cal=A.sum(axis=0)#当里面出现axis=0时,表示矩阵竖轴(列)之和;如果是axis=1,即表示横轴(行)之和
print(cal)
结果为:
[ 59. 239. 155.4 76.9]
percentage=100*A/cal.reshape(1,4)
print(percentage)
结果为:
[[94.91525424 0. 2.83140283 88.42652796]
[ 2.03389831 43.51464435 33.46203346 10.40312094]
[ 3.05084746 56.48535565 63.70656371 1.17035111]]
2.16 关于Numpy的ticks:尽量避免出现秩为1的数组,做到明确相应变量的具体维度。
import numpy as np
a=np.random.randn(5) #为便于理解,尽量不要使用这种模棱两可,不太清楚的方式,尽量采取以下方式(明确其具体维度)
print(a)
print(a.shape)
print(a.T)
print(a.T.shape)
import numpy as np
a=np.random.randn(5,1)#即即使因为某些原因,得到了一个秩为1 的数组,也应利用reshape(1,n)将其转换成一个列或者行向量。
assert(a.shape==(5,1))
print(a)
print(a.T)
print(np.dot(a,a.T))