BP神经网络多输入多输出的python代码
时间: 2024-12-26 15:24:23 浏览: 7
### BP神经网络多输入多输出的Python代码示例
为了构建一个多输入多输出的反向传播(BP)神经网络模型,可以采用如下所示的一个简化版本。此代码展示了如何定义一个具有多个输入和输出层的简单两层神经网络结构。
```python
import numpy as np
class NeuralNetwork:
def __init__(self, input_size, hidden_size, output_size):
self.input_size = input_size
self.hidden_size = hidden_size
self.output_size = output_size
# 初始化权重矩阵
self.W1 = np.random.randn(self.input_size, self.hidden_size)
self.b1 = np.zeros((1, self.hidden_size))
self.W2 = np.random.randn(self.hidden_size, self.output_size)
self.b2 = np.zeros((1, self.output_size))
def sigmoid(self, z):
return 1 / (1 + np.exp(-z))
def forward(self, X):
self.z1 = np.dot(X, self.W1) + self.b1
self.a1 = self.sigmoid(self.z1)
self.z2 = np.dot(self.a1, self.W2) + self.b2
y_hat = self.sigmoid(self.z2)
return y_hat
def backward(self, X, y, learning_rate=0.01):
m = X.shape[0]
# 计算误差 δL 对于最后一层
delta_L = (y_hat - y) * y_hat * (1 - y_hat)[^2]
# 更新第二层参数 W2 和 b2
dW2 = np.dot(self.a1.T, delta_L) / m
db2 = np.sum(delta_L, axis=0, keepdims=True) / m
# 向前一层传递误差并计算 δL-1
delta_l_minus_1 = np.dot(delta_L, self.W2.T) * self.a1 * (1 - self.a1)
# 更新第一层参数 W1 和 b1
dW1 = np.dot(X.T, delta_l_minus_1) / m
db1 = np.sum(delta_l_minus_1, axis=0, keepdims=True) / m
# 应用梯度下降更新权重
self.W2 -= learning_rate * dW2
self.b2 -= learning_rate * db2
self.W1 -= learning_rate * dW1
self.b1 -= learning_rate * db1
# 创建实例化对象
nn = NeuralNetwork(input_size=4, hidden_size=5, output_size=3)
# 假设数据集X_train形状为(n_samples, n_features),Y_train形状为(n_samples, n_outputs)
# 进行训练过程中的正向传播与反向传播迭代...
```
上述代码片段展示了一个简单的基于BP算法的两层神经网络类 `NeuralNetwork` 的实现方式[^1]。该网络接受四个特征作为输入,并预测三个类别标签的概率分布作为输出。通过调整隐藏层数量和其他超参数,可以根据具体应用场景定制更复杂的深层架构。
阅读全文