python实现BP神经网络
时间: 2023-08-31 22:10:08 浏览: 95
以下是一个简单的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.weights_ih = np.random.rand(self.hidden_size, self.input_size)
self.weights_ho = np.random.rand(self.output_size, self.hidden_size)
self.bias_h = np.random.rand(self.hidden_size, 1)
self.bias_o = np.random.rand(self.output_size, 1)
def sigmoid(self, z):
return 1 / (1 + np.exp(-z))
def feedforward(self, x):
x = np.array(x).reshape(-1, 1)
hidden_layer = self.sigmoid(np.dot(self.weights_ih, x) + self.bias_h)
output_layer = self.sigmoid(np.dot(self.weights_ho, hidden_layer) + self.bias_o)
return output_layer
def train(self, x, y, learning_rate):
x = np.array(x).reshape(-1, 1)
y = np.array(y).reshape(-1, 1)
hidden_layer = self.sigmoid(np.dot(self.weights_ih, x) + self.bias_h)
output_layer = self.sigmoid(np.dot(self.weights_ho, hidden_layer) + self.bias_o)
output_error = y - output_layer
output_delta = output_error * output_layer * (1 - output_layer)
hidden_error = np.dot(self.weights_ho.T, output_delta)
hidden_delta = hidden_error * hidden_layer * (1 - hidden_layer)
self.weights_ho += learning_rate * np.dot(output_delta, hidden_layer.T)
self.bias_o += learning_rate * output_delta
self.weights_ih += learning_rate * np.dot(hidden_delta, x.T)
self.bias_h += learning_rate * hidden_delta
```
在这个示例代码中,我们定义了一个名为`NeuralNetwork`的类,它具有三个属性:输入层的大小、隐藏层的大小和输出层的大小。在`__init__`方法中,我们随机初始化了权重矩阵和偏置向量。
`sigmoid`函数是我们使用的激活函数,它将给定的输入映射到0和1之间的值。
`feedforward`方法接受输入向量`x`,并返回神经网络的输出。在此方法中,我们首先将输入向量传递到隐藏层,然后将隐藏层的输出传递到输出层。
`train`方法是我们用于训练网络的方法。它接受输入向量`x`和期望输出向量`y`,以及一个学习率参数。在此方法中,我们首先进行前向传递以计算网络的输出。然后,我们计算输出误差和输出层的梯度。接下来,我们计算隐藏层的误差和梯度。最后,我们使用梯度下降算法来更新权重和偏置。
阅读全文