Python实现bp神经网络预测
时间: 2023-11-19 19:02:11 浏览: 81
python实现bp神经网络
4星 · 用户满意度95%
下面是一个简单的 Python 实现 BP 神经网络预测的示例代码,该代码使用 NumPy 库进行矩阵运算:
```python
import numpy as np
class NeuralNetwork:
def __init__(self, input_dim, hidden_dim, output_dim):
self.input_dim = input_dim
self.hidden_dim = hidden_dim
self.output_dim = output_dim
self.weights1 = np.random.randn(self.input_dim, self.hidden_dim)
self.weights2 = np.random.randn(self.hidden_dim, self.output_dim)
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(self, x):
return x * (1 - x)
def forward(self, X):
self.hidden_layer = self.sigmoid(np.dot(X, self.weights1))
self.output_layer = self.sigmoid(np.dot(self.hidden_layer, self.weights2))
def backward(self, X, y, learning_rate):
output_error = y - self.output_layer
output_delta = output_error * self.sigmoid_derivative(self.output_layer)
hidden_error = np.dot(output_delta, self.weights2.T)
hidden_delta = hidden_error * self.sigmoid_derivative(self.hidden_layer)
self.weights2 += learning_rate * np.dot(self.hidden_layer.T, output_delta)
self.weights1 += learning_rate * np.dot(X.T, hidden_delta)
def train(self, X, y, epochs, learning_rate):
for epoch in range(epochs):
self.forward(X)
self.backward(X, y, learning_rate)
def predict(self, X):
self.forward(X)
return self.output_layer
```
在上述代码中,我们首先定义了一个 `NeuralNetwork` 类,它包含了神经网络的结构和方法。在 `__init__` 方法中,我们随机初始化了两个权重矩阵 `weights1` 和 `weights2`,其形状分别为 `(input_dim, hidden_dim)` 和 `(hidden_dim, output_dim)`。
在 `sigmoid` 方法中,我们使用 Sigmoid 函数计算激活值;在 `sigmoid_derivative` 方法中,我们计算了 Sigmoid 函数的导数。
在 `forward` 方法中,我们首先计算了输入层到隐藏层的加权和,并使用 Sigmoid 函数计算激活值;然后计算了隐藏层到输出层的加权和,并使用 Sigmoid 函数计算输出层的激活值。
在 `backward` 方法中,我们首先计算了输出层的误差和误差项,然后使用反向传播算法计算了隐藏层的误差和误差项,并更新了权重矩阵。
在 `train` 方法中,我们使用梯度下降算法进行训练,即通过多次迭代更新权重矩阵,使得神经网络的输出逐渐接近真实值。
最后,在 `predict` 方法中,我们只需要调用 `forward` 方法计算输出层的激活值即可预测结果。
下面是使用该类进行 BP 神经网络预测的示例代码:
```python
# 构造训练数据
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]])
# 创建神经网络
nn = NeuralNetwork(input_dim=2, hidden_dim=4, output_dim=1)
# 训练神经网络
nn.train(X, y, epochs=10000, learning_rate=0.1)
# 预测结果
print(nn.predict(np.array([[0, 0], [0, 1], [1, 0], [1, 1]])))
```
在上述代码中,我们首先构造了一个 XOR 问题的数据集,包含了输入数据 `X` 和输出数据 `y`。然后创建了一个 `NeuralNetwork` 对象,并使用 `train` 方法训练了神经网络。最后使用 `predict` 方法预测了结果,并输出了预测值。
阅读全文