反向传播算法代码python
时间: 2023-08-06 17:11:10 浏览: 70
以下是一个简单的反向传播算法的 Python 代码实现:
```
# 定义神经网络的结构和参数
input_size = 2
hidden_size = 3
output_size = 1
# 权重和偏置
W1 = np.random.randn(input_size, hidden_size)
b1 = np.random.randn(hidden_size)
W2 = np.random.randn(hidden_size, output_size)
b2 = np.random.randn(output_size)
# 定义激活函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义损失函数
def mse_loss(y_true, y_pred):
return ((y_true - y_pred) ** 2).mean()
# 定义前向传播函数
def forward(x):
z1 = np.dot(x, W1) + b1
a1 = sigmoid(z1)
z2 = np.dot(a1, W2) + b2
a2 = sigmoid(z2)
return a1, a2
# 定义反向传播函数
def backward(x, y_true, a1, a2):
# 计算输出层的误差
delta2 = (a2 - y_true) * (a2 * (1 - a2))
# 计算隐藏层的误差
delta1 = np.dot(delta2, W2.T) * (a1 * (1 - a1))
# 更新权重和偏置
dW2 = np.dot(a1.T, delta2)
db2 = delta2.sum(axis=0)
dW1 = np.dot(x.T, delta1)
db1 = delta1.sum(axis=0)
# 返回梯度
return dW1, db1, dW2, db2
# 定义训练函数
def train(x, y_true, learning_rate=0.1, epochs=1000):
for i in range(epochs):
# 前向传播
a1, a2 = forward(x)
# 计算损失
loss = mse_loss(y_true, a2)
# 反向传播
dW1, db1, dW2, db2 = backward(x, y_true, a1, a2)
# 更新权重和偏置
W1 -= learning_rate * dW1
b1 -= learning_rate * db1
W2 -= learning_rate * dW2
b2 -= learning_rate * db2
# 打印损失
if i % 100 == 0:
print(f'Epoch {i}, Loss: {loss:.3f}')
# 返回训练后的权重和偏置
return W1, b1, W2, b2
```
注意,这只是一个简单的反向传播算法的实现,实际应用中可能需要进行更多的优化和改进。