构建神经网络的一般方法是:
-
定义神经网络结构(输入单元的数量,隐藏单元的数量等)。init_layer()
-
初始化模型的参数 init_parameters()
-
循环:
实施前向传播 forword_propogation()
计算损失 loss()
实现向后传播 back_propogation()
更新参数(梯度下降)update_parameters() -
预测 predict()
此图为吴恩达神经网络视频课后作业的第二个编程题的反向传播的公式推导,课后题:
def back_propogation(paremeters,cache, X, Y):
'''
反向传播
:param cache:
:param paremeters:
:return:
'''
m = X.shape[1]
Z1 = cache['Z1']
A1 = cache['A1']
Z2 = cache['Z2']
A2 = cache['A2']
W1 = paremeters['W1']
W2 = paremeters['W2']
dZ2 =(1/m) *(A2 - Y)
dW2 = np.dot(dZ2, A1.T)
db2 = np.sum(dZ2) ######为什么要求和
dZ1 = np.multiply(np.dot(W2.T, dZ2), (1 - np.power(A1, 2)))
dW1 = np.dot(dZ1, X.T)
db1 = np.sum(dZ1)
grads = {
'dW2':dW2,
'db2':db2,
'dW1':dW1,
'db1':db1
}
return grads
def update_parameters(parameters, grads, learning_rate = 1.2):
'''
参数更新,即执行梯度下降
:param cache:
:param grads:
:return:
'''
W1, W2 = parameters['W1'], parameters['W2']
b1, b2 = parameters['b1'], parameters['b2']
dW1, dW2 =