写一个反向传播的python代码
时间: 2024-03-02 10:28:30 浏览: 76
反向传播算法python实现
好的,以下是一个简单的反向传播的Python代码示例:
```python
import numpy as np
# 定义sigmoid函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义反向传播函数
def backward_propagation(X, Y, parameters, cache):
m = X.shape[1]
# 从缓存中获取前向传播计算过程中的变量
A1 = cache['A1']
A2 = cache['A2']
W2 = parameters['W2']
# 计算输出层的误差
dA2 = - (np.divide(Y, A2) - np.divide(1 - Y, 1 - A2))
# 计算输出层的权重和偏置的梯度
dZ2 = dA2 * sigmoid(A2) * (1 - sigmoid(A2))
dW2 = 1 / m * np.dot(dZ2, A1.T)
db2 = 1 / m * np.sum(dZ2, axis=1, keepdims=True)
# 计算隐藏层的误差
dA1 = np.dot(W2.T, dZ2)
# 计算隐藏层的权重和偏置的梯度
dZ1 = dA1 * sigmoid(A1) * (1 - sigmoid(A1))
dW1 = 1 / m * np.dot(dZ1, X.T)
db1 = 1 / m * np.sum(dZ1, axis=1, keepdims=True)
# 更新参数
parameters['W1'] = parameters['W1'] - learning_rate * dW1
parameters['b1'] = parameters['b1'] - learning_rate * db1
parameters['W2'] = parameters['W2'] - learning_rate * dW2
parameters['b2'] = parameters['b2'] - learning_rate * db2
return parameters
```
这是一个简单的两层神经网络的反向传播代码,其中使用了sigmoid激活函数和梯度下降更新参数。在这个例子中,我们计算了输出层和隐藏层的误差,并计算了对应的权重和偏置的梯度,然后使用梯度下降算法更新参数。
阅读全文