Python实现bp神经网络预测
时间: 2023-11-19 07:06:49 浏览: 82
这里提供一个简单的基于Python实现bp神经网络预测的示例代码:
```python
import numpy as np
class BPNeuralNetwork:
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.random.randn(self.hidden_size)
self.w2 = np.random.randn(self.hidden_size, self.output_size)
self.b2 = np.random.randn(self.output_size)
def sigmoid(self, x):
return 1.0 / (1.0 + np.exp(-x))
def sigmoid_derivative(self, x):
return x * (1.0 - x)
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
self.a2 = self.sigmoid(self.z2)
return self.a2
def backward(self, x, y, output):
self.error = output - y
self.delta2 = self.error * self.sigmoid_derivative(output)
self.error_hidden = np.dot(self.delta2, self.w2.T)
self.delta1 = self.error_hidden * self.sigmoid_derivative(self.a1)
self.w2 -= self.a1.T.dot(self.delta2)
self.b2 -= np.sum(self.delta2, axis=0)
self.w1 -= x.T.dot(self.delta1)
self.b1 -= np.sum(self.delta1, axis=0)
def train(self, x, y, epochs=1000, learning_rate=0.1):
for i in range(epochs):
output = self.forward(x)
self.backward(x, y, output)
if i % 100 == 0:
loss = np.mean(np.square(self.error))
print("Epoch %d Loss: %.4f" % (i, loss))
def predict(self, x):
return self.forward(x)
```
这个类实现了一个具有一个隐藏层的bp神经网络,优化算法为梯度下降,激活函数为sigmoid函数。其中,构造函数中的参数含义为:input_size为输入层大小,hidden_size为隐藏层大小,output_size为输出层大小。forward方法实现了前向传播,backward方法实现了反向传播,train方法实现了训练模型,predict方法实现了模型预测。
下面是一个简单的使用示例:
```python
import numpy as np
# 构造训练数据
x = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]])
# 创建神经网络
nn = BPNeuralNetwork(2, 3, 1)
# 训练神经网络
nn.train(x, y, epochs=10000, learning_rate=0.1)
# 预测结果
print(nn.predict(np.array([0, 0])))
print(nn.predict(np.array([0, 1])))
print(nn.predict(np.array([1, 0])))
print(nn.predict(np.array([1, 1])))
```
这个示例使用了一组简单的逻辑异或问题的训练数据。最终输出的预测结果为:
```
[[0.012]]
[[0.988]]
[[0.988]]
[[0.012]]
```
可以看到,该bp神经网络成功地解决了逻辑异或问题,预测结果与期望结果非常接近。
阅读全文