吴恩达DL——第二课作业

目录

第一部分:初始化

第二部分:

正则化

drop-out

第三部分:梯度检验

1维梯度检验

多维梯度检验


 

第一部分:初始化

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

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_22527013/article/details/86715909