Python 多输入单输出BP神经网络
时间: 2023-09-21 18:11:31 浏览: 111
BP神经网络是一种常用的人工神经网络,可以用于分类和回归等任务。在Python中,可以使用NumPy库来实现多输入单输出的BP神经网络。
首先,需要定义神经网络的结构,包括输入层、隐藏层和输出层的神经元数量。假设我们要实现的神经网络有2个输入、3个隐藏神经元和1个输出。
```python
import numpy as np
class NeuralNetwork:
def __init__(self):
# 定义神经网络结构
self.inputs = 2
self.hiddenNodes = 3
self.output = 1
# 初始化权重
self.weights1 = np.random.randn(self.inputs, self.hiddenNodes)
self.weights2 = np.random.randn(self.hiddenNodes, self.output)
```
接下来,需要定义神经网络的前向传播和反向传播算法。前向传播算法用于计算神经网络的输出,反向传播算法用于更新权重。
```python
class NeuralNetwork:
def __init__(self):
# 定义神经网络结构
self.inputs = 2
self.hiddenNodes = 3
self.output = 1
# 初始化权重
self.weights1 = np.random.randn(self.inputs, self.hiddenNodes)
self.weights2 = np.random.randn(self.hiddenNodes, self.output)
def sigmoid(self, s):
return 1 / (1 + np.exp(-s))
def sigmoidPrime(self, s):
return s * (1 - s)
def feed_forward(self, X):
self.hidden_sum = np.dot(X, self.weights1)
self.activated_hidden = self.sigmoid(self.hidden_sum)
self.output_sum = np.dot(self.activated_hidden, self.weights2)
self.activated_output = self.sigmoid(self.output_sum)
return self.activated_output
def backward(self, X, y, o):
self.o_error = y - o
self.o_delta = self.o_error * self.sigmoidPrime(o)
self.z2_error = self.o_delta.dot(self.weights2.T)
self.z2_delta = self.z2_error * self.sigmoidPrime(self.activated_hidden)
self.weights1 += X.T.dot(self.z2_delta)
self.weights2 += self.activated_hidden.T.dot(self.o_delta)
def train(self, X, y):
o = self.feed_forward(X)
self.backward(X, y, o)
```
在训练神经网络之前,需要准备训练数据。假设我们有以下4个训练样本:
```python
X = np.array([
[0, 0],
[0, 1],
[1, 0],
[1, 1]
])
y = np.array([
[0],
[1],
[1],
[0]
])
```
然后,可以使用以下代码训练神经网络:
```python
nn = NeuralNetwork()
for i in range(1500):
nn.train(X, y)
print(nn.feed_forward(X))
```
最后,可以使用训练好的神经网络对新的数据进行预测:
```python
X_test = np.array([
[0, 0],
[0, 1],
[1, 0],
[1, 1]
])
print(nn.feed_forward(X_test))
```
输出结果应该为:
```
[[0.02473172]
[0.98311219]
[0.98313063]
[0.01855111]]
```
阅读全文