@catscarf
2018-04-07T16:46:49.000000Z
字数 2470
阅读 1341
样本矩阵
计算 可以按照以下流程
graph LR
subgraph 1
a1((a = 5))
a2((b = 3))
a3((c = 2))
end
subgraph 2
b1[u = bc]
end
subgraph 3
c1[v = a + u]
end
subgraph 4
d1[J = 3v]
end
a1-->c1
a2-->b1
a3-->b1
b1-->c1
c1-->d1
这是一个从左向右的过程,类似于神经网络的前向传播
d[var]
来表示向量化(Vectorization)
for
循环二期 32.11 向量化(Vectorization)
import numpy as np
a = 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) + b
Z
包括了所有的样本,是一个 的矩阵使用 for
循环
dw1 = 0, dw2 = 0, db = 0
for 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/dw1
dw2 += x2[i]dz[i] //由链式法则得到dJ/dw2
db += dz[i] //由链式法则得到dJ/db
dw1 /= m
dw2 /= m
db /= m
w1 -= alpha * dw1
w2 -= alpha * dw2
b -= alpha * db //完成一次梯度下降
向量化
Z = np.dot(W.T,X) + b
A = sigma(Z)
dZ = A - Y
dw = X * DZ.T / m
db = np.sum(dZ)
w -= alpha * dw
b -= 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()