@catscarf
2018-04-07T08:46:49.000000Z
字数 2470
阅读 1494
样本矩阵
计算 可以按照以下流程
graph LRsubgraph 1a1((a = 5))a2((b = 3))a3((c = 2))endsubgraph 2b1[u = bc]endsubgraph 3c1[v = a + u]endsubgraph 4d1[J = 3v]enda1-->c1a2-->b1a3-->b1b1-->c1c1-->d1
这是一个从左向右的过程,类似于神经网络的前向传播
d[var]来表示向量化(Vectorization)
for 循环二期 32.11 向量化(Vectorization)
import numpy as npa = np.random.rand(1000000)b = np.random.rand(1000000)c = np.dot(a,b) //该方法中,两个一维向量运算结果为点积,两个矩阵运算结果为矩阵积print(c)
向量化远远快于使用循环语句,CPU和GPU执行SIMD都不慢
Z = np.dot(w.T,x) + bZ 包括了所有的样本,是一个 的矩阵使用 for 循环
dw1 = 0, dw2 = 0, db = 0for i = 1 in range(m):z[i] = w.T * x[i] + b //w, b的初始值已知,得到一个值a[i] = sigma(Z[i]) //求得logist回归的函数值dz[i] = a[i] - y[i] //由2.9章的链式法则得到的dJ/dz,y是标签dw1 += x1[i]dz[i] //由链式法则得到dJ/dw1dw2 += x2[i]dz[i] //由链式法则得到dJ/dw2db += dz[i] //由链式法则得到dJ/dbdw1 /= mdw2 /= mdb /= mw1 -= alpha * dw1w2 -= alpha * dw2b -= alpha * db //完成一次梯度下降
向量化
Z = np.dot(W.T,X) + bA = sigma(Z)dZ = A - Ydw = X * DZ.T / mdb = np.sum(dZ)w -= alpha * dwb -= alpha * db
当然进行梯度下降的迭代仍然需要使用 for 循环
(m,n) [+-*/] (1,n) --> (m,n) [+-*/] (m,n)np.random.randn(5,1) 而不是 np.random.randn(5)assert(a.shape == (5,1))reshape()