python bp神经网络 异或_BP神经网络求解异或问题(Python实现)
时间: 2023-10-28 21:20:40 浏览: 115
BP_XOR_python_异或xor_BP神经网络_
好的,下面是一个简单的 Python 实现 BP 神经网络求解异或问题的例子:
```python
import numpy as np
# 定义 sigmoid 函数和它的导数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(x):
return x * (1 - x)
# 构建神经网络
class NeuralNetwork:
def __init__(self, x, y):
self.input = x
self.weights1 = np.random.rand(self.input.shape[1], 4)
self.weights2 = np.random.rand(4, 1)
self.y = y
self.output = np.zeros(self.y.shape)
def feedforward(self):
self.layer1 = sigmoid(np.dot(self.input, self.weights1))
self.output = sigmoid(np.dot(self.layer1, self.weights2))
def backprop(self):
# 应用链式法则计算输出层误差
d_weights2 = np.dot(self.layer1.T, (2*(self.y - self.output) * sigmoid_derivative(self.output)))
# 应用链式法则计算隐藏层误差
d_weights1 = np.dot(self.input.T, (np.dot(2*(self.y - self.output) * sigmoid_derivative(self.output), self.weights2.T) * sigmoid_derivative(self.layer1)))
# 更新权重
self.weights1 += d_weights1
self.weights2 += d_weights2
# 输入数据和标签
X = np.array([[0,0], [0,1], [1,0], [1,1]])
y = np.array([[0],[1],[1],[0]])
# 初始化神经网络
nn = NeuralNetwork(X,y)
# 训练神经网络
for i in range(1500):
nn.feedforward()
nn.backprop()
# 输出训练结果
print(nn.output)
```
这个代码实现了一个具有一个隐藏层的 BP 神经网络,用于求解异或问题。在构建神经网络时,我们使用了 2 个权重矩阵:weights1 和 weights2,分别连接输入层和隐藏层、隐藏层和输出层。在训练神经网络时,我们使用了前向传播和反向传播算法。其中,前向传播用于计算神经网络的输出,反向传播用于更新权重矩阵以最小化误差。最终,我们得到了一个能够正确预测异或运算结果的神经网络。
阅读全文