反向传播bp算法代码
时间: 2023-07-03 21:16:03 浏览: 128
反向传播(backpropagation,简称BP)是一种用于训练神经网络的算法,其主要目的是通过计算误差并反向传播来更新每个神经元之间的权重。
以下是一个简单的反向传播算法的代码示例:
```python
# 初始化网络参数
input_layer_size = 2
hidden_layer_size = 3
output_layer_size = 1
# 初始化权重和偏差
W1 = np.random.randn(input_layer_size, hidden_layer_size)
b1 = np.zeros((1, hidden_layer_size))
W2 = np.random.randn(hidden_layer_size, output_layer_size)
b2 = np.zeros((1, output_layer_size))
# 定义激活函数
def sigmoid(z):
return 1 / (1 + np.exp(-z))
# 定义反向传播算法
def backpropagation(X, y, W1, b1, W2, b2, learning_rate):
# 前向传播
z1 = np.dot(X, W1) + b1
a1 = sigmoid(z1)
z2 = np.dot(a1, W2) + b2
y_pred = sigmoid(z2)
# 计算误差
delta3 = y_pred - y
# 反向传播
delta2 = np.dot(delta3, W2.T) * (a1 * (1 - a1))
# 更新权重和偏差
dW2 = np.dot(a1.T, delta3)
db2 = np.sum(delta3, axis=0, keepdims=True)
dW1 = np.dot(X.T, delta2)
db1 = np.sum(delta2, axis=0)
W2 -= learning_rate * dW2
b2 -= learning_rate * db2
W1 -= learning_rate * dW1
b1 -= learning_rate * db1
return W1, b1, W2, b2
# 训练模型
for i in range(1000):
W1, b1, W2, b2 = backpropagation(X, y, W1, b1, W2, b2, 0.1)
# 预测结果
z1 = np.dot(X, W1) + b1
a1 = sigmoid(z1)
z2 = np.dot(a1, W2) + b2
y_pred = sigmoid(z2)
```
这段代码假设我们要训练一个具有一个隐藏层、2个输入节点和1个输出节点的神经网络。我们首先随机初始化权重和偏差,然后定义了一个`sigmoid`激活函数。然后我们定义了一个`backpropagation`函数,该函数接收输入数据`X`和目标输出`y`,以及当前的权重和偏差,并使用反向传播算法来更新权重和偏差。在训练模型时,我们重复调用`backpropagation`函数,直到模型收敛。最后,我们使用训练好的模型来预测新的输入数据。
阅读全文