写一个BP神经网络模型的代码
时间: 2023-12-01 18:55:58 浏览: 74
基于BP神经网络的模型建立,然后用多目标优化进行寻优(代码完整,数据齐全)
5星 · 资源好评率100%
好的,以下是一个简单的BP神经网络模型的代码,它包括了前向传播和反向传播过程:
```python
import numpy as np
class BPNeuralNetwork:
def __init__(self, input_shape, hidden_shape, output_shape):
self.input_shape = input_shape
self.hidden_shape = hidden_shape
self.output_shape = output_shape
# 初始化权重矩阵
self.weights_ih = np.random.randn(self.input_shape, self.hidden_shape)
self.weights_ho = np.random.randn(self.hidden_shape, self.output_shape)
# 初始化偏置向量
self.bias_h = np.zeros((1, self.hidden_shape))
self.bias_o = np.zeros((1, self.output_shape))
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.weights_ih) + self.bias_h)
self.output_layer = self.sigmoid(np.dot(self.hidden_layer, self.weights_ho) + self.bias_o)
return self.output_layer
def backward(self, X, y, output):
# 反向传播过程
error_output = y - output
delta_output = error_output * self.sigmoid_derivative(output)
error_hidden = delta_output.dot(self.weights_ho.T)
delta_hidden = error_hidden * self.sigmoid_derivative(self.hidden_layer)
self.weights_ho += self.hidden_layer.T.dot(delta_output)
self.weights_ih += X.T.dot(delta_hidden)
self.bias_o += np.sum(delta_output, axis=0)
self.bias_h += np.sum(delta_hidden, axis=0)
def train(self, X, y, epochs):
for i in range(epochs):
output = self.forward(X)
self.backward(X, y, output)
```
在使用该类时,我们需要指定输入层、隐藏层和输出层的节点数,以及训练数据和训练轮数。例如,我们可以这样使用:
```python
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]])
model = BPNeuralNetwork(input_shape=2, hidden_shape=4, output_shape=1)
model.train(X, y, epochs=10000)
print(model.forward(X))
```
这个例子是一个简单的异或门问题,我们可以看到,经过10000轮训练后,神经网络模型可以正确地预测出每个输入的输出。
阅读全文