L-向后模型模块:
在这一部分中,我们将实现全网的后向功能。回想一下,当我们实现L_MODEL_FORWARD函数时,我们在每次迭代(X、W、b和z)时存储了一个包含缓存的缓存。在反向传播模块中,我们将使用这些变量来计算梯度。因此,在L_MODEL_FORWARD函数中,我们将从层L开始向后迭代所有隐藏层。在每一步中,我们将使用层l的缓存值通过层l反向传播。下图显示了向后传递。
要通过此网络反向传播,我们知道输出为:
我们的代码需要计算:
为此,我们将使用此公式(使用您不需要记住的微积分导出):
然后我们可以使用这个激活后梯度DAL来继续后退。如上图所示,我们现在可以将DAL输入到我们实现的LINEAR->Sigmoid Backup函数中(该函数将使用L_MODEL_FORWARD函数存储的缓存值)。在此之后,我们将必须使用for循环,使用LINEAR->RELU BACKUP函数遍历所有其他层。我们应该把每个da、dw和db存储在Grads字典中。为此,我们将使用以下公式:
例如,对于l=3,这会将dw[l]存储在grads[“dw3”]中。
我们的LINEAR_BACKWARD函数的代码:
参数:
al-概率向量,前向传播L_model_ward()的输出;Y-true“label”向量(如果非CAT,则包含0,如果是cat,则包含1);cache-包含以下内容的缓存列表:1.具有“relu”的每个线性激活转发()缓存(其缓存[l],对于l在范围(L-1)内,即l=0.L-2);2.具有“sigmoid”的线性激活转发(其缓存[L-1])的缓存(它的缓存[L-1],对于l在范围(L-1)中,即l=0.L-2);2.具有“sigmoid”的线性激活转发(它的缓存[L-1])的缓存
返回:
Grads-带有渐变的字典:Grads[“da”+str(L)]=…梯度[“dw”+str(L)]=…grads[“db”+str(L)]=…
更新参数模块:
在本节中,我们将使用梯度下降来更新模型的参数:
这里α是学习率。计算完更新后的参数后,我们将把它们存储在参数字典中。
我们UPDATE_PARAMETERS函数的代码:
参数:
参数-包含我们的参数的python字典。Grads-包含我们的渐变的python字典,L_MODEL_BACKBACK的输出。
返回:
参数-包含我们更新的参数的Python字典:Parameters[“W”+str(L)]=…参数[“b”+字符串(L)]=…
结论:
祝贺您实现了构建深度神经网络所需的所有功能。这是一个很长的教程,但从现在开始,它只会变得更好。在下一部分中,我们将把所有这些放在一起来构建L层神经网络(深度)。事实上,我们将使用这些模型来对猫和狗的图像进行分类。
最初发表于https://pylessons.com/Deep-neural-networks-part4https://pylessons.com/Deep-neural-networks-part4
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/07/28/%e6%b7%b1%e5%ba%a6%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c%e5%8f%8d%e5%90%91%e6%a8%a1%e5%9d%97/