美文网首页
《改善深层神经网络:超参数调试、正则化以及优化》作业注意事项

《改善深层神经网络:超参数调试、正则化以及优化》作业注意事项

作者: wipping的技术小栈 | 来源:发表于2019-11-10 17:24 被阅读0次

    第二周作业注意事项

    numpy的常用函数

    numpy 的四则运算有广播功能,这里不多做说明,下面的函数是我们numpy常用到几个函数及其注意要点

    • dot:内积点乘
    • outer:外积
    • multiply: 对应元素乘积
    • squeeze:压缩指定的维度

    在一些 numpy 函数中会有以下的一些参数

    • axis:一般用于指定操作的维度,比如axis=0,计算第一个维度

    推荐《理解Numpy》https://blog.csdn.net/qq_40723809/article/details/87886240

    数据的标准化

    数据的标准化和规范化http://www.aiseminar.com/bbs/forum.php?mod=viewthread&tid=214

    错误集合

    1. 'c' argument has 1 elements, which is not acceptable for use with 'x' with s

    出现以上错误可以使用下面的代码,并将 出现 cY 的地方替换为最后一句

    import operator
    from functools import reduce
    c=reduce(operator.add, Y)#用这句替换
    
    1. RuntimeWarning: divide by zero encountered in log

    上面的错误是因为除0了,推荐查阅博客https://blog.csdn.net/qq_34439215/article/details/89520018

    注意事项

    这里列出笔者在做作业过程中遇到的需要注意的地方和比较难理解的代码

    深度神经网络流程

    笔者在作业过程中有种 忘了之前的函数是什么了 的感觉,所以干脆记下了一个小步骤的函数,逐个整理出来作为一个流程,最后就比较清晰明了了

    #1. 参数初始化
    parameters = def initialize_parameters(n_x, n_h, n_y)
    parameters = def initialize_parameters_deep(layer_dims)
    parameters = {
        [WL]
        [BL]
    }# 这个是参数的数据结构
    #2. 前向函数计算并记录下中间变量cache
    A, linear_activation_cache = linear_activation_forward(A_prev, W, b, activation = "relu")
    A, linear_activation_cache = linear_activation_forward(A_prev, 
                                                           W, 
                                                           b, 
                                                           activation = "sigmoid")
    ## 中间变量的格式如下
    activation_cache = (Z)
    linear_cache = (A, W, b)
    linear_activation_cache = (linear_cache, activation_cache)
    #3. 进行模型前向计算并记录下最后的AL输出和中间变量,用于多层神经网络
    AL, caches = L_model_forward(X, parameters)
    ## caches是所有的中间变量的列表
    caches = [linear_activation_cache]
    # 4.利用前向计算中间变量后向函数计算
    dA_prev, dW, db = linear_backward(dZ, linear_cache)
    dA_prev, dW, db = linear_activation_backward(AL,
                                                 linear_activation_cache, 
                                                 activation = "relu")
    dA_prev, dW, db = linear_activation_backward(AL,
                                                 linear_activation_cache, 
                                                 activation = "sigmoid")
    #5. 进行模型后向计算并返回梯度,用于多层神经网络。梯度是一个字典,直接通过key来寻址
    grads = L_model_backward(AL, Y_assess, caches)
    #6. 利用梯度更新参数
    parameters = update_parameters(parameters, grads, 0.1)
    

    函数L_model_backward的注意点

    L_model_backward 函数中有如下代码

    for l in reversed(range(L - 1)):
        dA_prev_temp, dW_temp, db_temp = linear_activation_backward(grads["dA" + str(l+2)],                                                                 current_cache, 
                                                                    activation = "relu")
        grads["dA" + str(l + 1)] = dA_prev_temp
        grads["dW" + str(l + 1)] = dW_temp
        grads["db" + str(l + 1)] = db_temp
    

    注意到 grads["dA" + str(l+2),这里的 l + 2 是为什么呢?
    这是一个循环,且循环是从 0 到 L-1 ,也就是第 1 层其实对应的下标是 0 ,那么这里我们就需要加 1 。假设我们计算 第 l 层的 dA,那么我们需要下一层,即 l+1 层的 dA,所以这里又需要加 1,这就是为什么是加 2 了

    相关文章

      网友评论

          本文标题:《改善深层神经网络:超参数调试、正则化以及优化》作业注意事项

          本文链接:https://www.haomeiwen.com/subject/kfuabctx.html