用python代码实现bp神经网络
时间: 2023-06-06 14:06:08 浏览: 112
用Python实现BP神经网络(附代码)
5星 · 资源好评率100%
当然可以,BP神经网络是目前应用广泛的一种神经网络。以下是一个简单的Python代码实现BP神经网络的示例:
```python
import numpy as np
# 定义sigmoid函数
def sigmoid(x):
return 1.0/(1.0+np.exp(-x))
# 定义BP神经网络类
class BPNN:
# 初始化
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.W1 = np.random.randn(input_dim,hidden_dim)
self.b1 = np.random.randn(hidden_dim)
self.W2 = np.random.randn(hidden_dim,output_dim)
self.b2 = np.random.randn(output_dim)
# 前向传播
def forward(self, X):
net_hidden = np.dot(X, self.W1) + self.b1
output_hidden = sigmoid(net_hidden)
net_output = np.dot(output_hidden, self.W2) + self.b2
output = sigmoid(net_output)
return output, output_hidden
# 反向传播
def backward(self, X, Y, output, output_hidden, lr):
error_output = (Y - output) * output * (1 - output)
error_hidden = np.dot(error_output, self.W2.T) * output_hidden * (1 - output_hidden)
self.W2 += lr * np.dot(output_hidden.T, error_output)
self.b2 += lr * np.sum(error_output, axis=0)
self.W1 += lr * np.dot(X.T, error_hidden)
self.b1 += lr * np.sum(error_hidden, axis=0)
# 训练
def train(self, X, Y, lr, epochs):
for i in range(epochs):
output, output_hidden = self.forward(X)
self.backward(X, Y, output, output_hidden, lr)
# 预测
def predict(self, X):
output, _ = self.forward(X)
return output
```
以上代码实现了一个简单的三层BP神经网络,采用sigmoid函数作为激活函数,提供了初始化权重和偏差、前向传播、反向传播、训练等方法。你可以通过实例化`BPNN`类,传入输入层、隐藏层、输出层的维度,来构建一个BP神经网络。然后,通过传入训练数据和标签,设定学习率和迭代次数,来训练该神经网络。最后,可以通过调用`BPNN`的`predict()`方法,传入测试数据,来进行预测。
阅读全文