目录
第一部分:初始化
model(X, Y, learning_rate = 0.01, num_iterations = 15000, print_cost = True, initialization = "he")——返回parameters
initialize_parameters_zeros(layers_dims)——按照各层初始化参数 ,返回parameters 包括w1,b1,w2,b2,w3,b3等 wl→(w[l],w[l-1]) b→(w[l],1)
initialize_parameters_random(layers_dims)——随机初始化各层参数,返回parameters 包括w1,b1,w2,b2,w3,b3等 wl→(w[l],w[l-1]) b→(w[l],1)
initialize_parameters_he(layers_dims)——用论文中的方法初始化 sqrt(2./layers_dims[l-1])
※不同的初始化方式→不同的结果
※随机初始化能够打破网络的对称性
※不要把参数初始化得太大
※在使用Relu为激活函数时,使用he的初始方法更好
第二部分:
正则化
model(X, Y, learning_rate = 0.3, num_iterations = 30000, print_cost = True, lambd = 0, keep_prob = 1)
lambd为0表示不进行正则化,keep-prob为1表示不进行dropout
最后得到各层参数
compute_cost_with_regularization(A3, Y, parameters, lambd)——计算正则项的cost 在原始的cost之上加上1/m * (lambd/2)*(np.sum(np.square(W1))+np.sum(np.square(W2))+np.sum(np.square(W3))) 对每一个W矩阵平方再相加
backward_propagation_with_regularization(X, Y, cache, lambd)——带正则项的反向传播,正则项只对Dw有影响 dWi = dWi(原) + lambd/m * Wi
drop-out
forward_propagation_with_dropout(X, parameters, keep_prob = 0.5) —— 带drop-out的前向传播,返回计算结果A3和cache
cache = (Z1, D1, A1, W1, b1, Z2, D2, A2, W2, b2, Z3, A3, W3, b3)
a[l] → d[l] d和a有相同的shape 使用np.random.rand()进行初始化
向量化实现 D[l] = [d[l](1) d[l](2) d[l](3) ··· ··· d[l](m)] m个样本 分别计算 (在一次迭代中,一次性运算,加快速度)
再A[l] = A[l] * D[l] A[l] = A[l] / keep_prob,因为在计算时,A[l]本来就是m个样本的,所以D[l]直接为A[l]的shape即可
D1 = np.random.rand(A1.shape[0],A1.shape[1]) D1 = (D1 < keep_prob)
backward_propagation_with_dropout(X, Y, cache, keep_prob)——带drop-out的反向传播,返回各层的梯度
先照常计算,在计算出dA1之后,使用dA1*D1,再用dA1/keep_prob
第三部分:梯度检验
1维梯度检验
forward_propagation(x, theta) —— 用θ和x进行前向传播
backward_propagation(x, theta) —— 用θ和x进行反向传播 得到J关于θ的导数
gradient_check(x, theta, epsilon = 1e-7) ——检查梯度
多维梯度检验
gradient_check_n(parameters, gradients, X, Y, epsilon = 1e-7)——parameters里包括前向传播的各种参数,gradients里包括反向传播的各种参数
①将parameters展开成一个num×1的向量
②将gradients展开成一个num×1的向量
③根据parameters中的参数个数,依次进行
- +epsilon到单个参数上
- 将参数向量→字典,进行前向传播得到J(thetaplus)
- -epsilon到单个参数上
- 将参数向量→字典,进行前向传播得到J(thetaminus)
- gradapprox[i] = (J_plus[i] -J_minus[i])/(2 * epsilon)
- 计算difference