bp神经网络预测模型py
时间: 2023-11-16 09:15:13 浏览: 72
以下是使用Python编写BP神经网络预测模型的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义激活函数 sigmoid
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义 BP 神经网络类
class BPNN:
def __init__(self, input_size, hidden_size, output_size):
# 初始化权重和偏置
self.W1 = np.random.randn(input_size, hidden_size)
self.b1 = np.random.randn(hidden_size)
self.W2 = np.random.randn(hidden_size, output_size)
self.b2 = np.random.randn(output_size)
# 前向传播
def forward(self, X):
self.z1 = np.dot(X, self.W1) + self.b1
self.a1 = sigmoid(self.z1)
self.z2 = np.dot(self.a1, self.W2) + self.b2
self.y_hat = self.z2
# 反向传播
def backward(self, X, y, lr):
delta3 = self.y_hat - y
dW2 = np.dot(self.a1.T, delta3)
db2 = np.sum(delta3, axis=0)
delta2 = np.dot(delta3, self.W2.T) * sigmoid(self.z1) * (1 - sigmoid(self.z1))
dW1 = np.dot(X.T, delta2)
db1 = np.sum(delta2, axis=0)
# 更新权重和偏置
self.W2 -= lr * dW2
self.b2 -= lr * db2
self.W1 -= lr * dW1
self.b1 -= lr * db1
# 训练模型
def train(self, X, y, lr, epochs):
self.loss = []
for i in range(epochs):
self.forward(X)
loss = np.mean((self.y_hat - y) ** 2)
self.loss.append(loss)
self.backward(X, y, lr)
if i % 1000 == 0:
print("Epoch:", i, "Loss:", loss)
# 预测
def predict(self, X):
self.forward(X)
return self.y_hat
# 生成数据
X = np.linspace(0, 10, 100).reshape(-1, 1)
y = np.sin(X)
# 实例化 BPNN 类
model = BPNN(input_size=1, hidden_size=10, output_size=1)
# 训练模型
model.train(X, y, lr=0.01, epochs=10000)
# 可视化损失函数
plt.plot(model.loss)
plt.title("Loss")
plt.show()
# 预测新数据
X_new = np.linspace(0, 10, 100).reshape(-1, 1)
y_pred = model.predict(X_new)
# 可视化预测结果
plt.plot(X, y, label="True")
plt.plot(X_new, y_pred, label="Predicted")
plt.legend()
plt.show()
```
在此示例中,我们使用BP神经网络来预测一个正弦函数。我们首先生成一些正弦函数的数据,然后使用BP神经网络来拟合这些数据。最后,我们使用训练好的模型对新数据进行预测,并可视化真实值和预测值之间的比较。
阅读全文