目录

1.向量化

  (1)将n个维度对应的dw看作一个列向量

  (2)将 m 个样本看成矩阵X


1.向量化
  • 在神经网络训练中,使用向量化的方法将for循环转化为矩阵/向量运算,提升算法效率
(1)将n个维度对应的dw看作一个列向量
# 1.初始化
J = 0; 
dw = np.zeros((n, 1)); 
db = 0;
# 2.for循环遍历训练集,并且计算相应的每个训练样本的导数
for i = 1 to m
    z(i) = x(i)w+b;
    a(i) = 1 / (1 + np.exp(-z(i)));  #a[i] = sigmoid(z(i))
    J += -[y(i)log(a(i))+(1-y(i))log(1-a(i));
    dz(i) = a(i)-y(i);
    # 将dw1,dw2……转化为列向量dw
    dw += x(i)dz(i);
    db += dz(i);
# 3.最终对所有的m个训练样本都进行了这个计算,你还需要除以m,计算平均值
J /= m;
dw /= m;
db /= m;
(2)将 m 个样本看成矩阵X
  • 将 m 个样本看成矩阵X,简化z,a, dz的计算
  • 广播:python中一个数组/矩阵加一个实数/向量,会把实数自动变为对应的数组
    基本原则:

  • eg:

  • 简化过程


# 简化 Z,A
# Z = [z1, z2, z3, ……]
# A = [a1, a2, a3, ……]
Z = np.dot(w.T, X) + b
A = 1 / (1 + np.exp(-Z))
dZ = A - Y
dw = 1/m * np.dot(X, dZ.T)
db = 1/m * np.sum(dZ)

# 迭代更新 w, b
# w -= αdw
# b -= αdb

更多推荐