pythonBP神经网络四输入两数值输出代码
时间: 2024-03-29 21:12:38 浏览: 124
BP神经网络Python程序,详细注释,可直接带入列表数据使用
5星 · 资源好评率100%
以下是Python实现的BP神经网络四输入两数值输出代码的示例:
```
import numpy as np
# 定义BP神经网络类
class BPNN:
def __init__(self, input_num, hidden_num, output_num):
# 初始化权重矩阵和偏置向量
self.w1 = np.random.normal(0, 1, (input_num, hidden_num))
self.b1 = np.random.normal(0, 1, hidden_num)
self.w2 = np.random.normal(0, 1, (hidden_num, output_num))
self.b2 = np.random.normal(0, 1, output_num)
def sigmoid(self, x):
# sigmoid函数
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(self, x):
# sigmoid函数的导数
return x * (1 - x)
def forward(self, input_data):
# 前向传播
self.z1 = np.dot(input_data, self.w1) + self.b1
self.a1 = self.sigmoid(self.z1)
self.z2 = np.dot(self.a1, self.w2) + self.b2
self.a2 = self.sigmoid(self.z2)
return self.a2
def backward(self, input_data, output_data, output_predict, learning_rate):
# 反向传播
delta2 = (output_predict - output_data) * self.sigmoid_derivative(output_predict)
delta1 = np.dot(delta2, self.w2.T) * self.sigmoid_derivative(self.a1)
self.w2 -= learning_rate * np.dot(self.a1.T, delta2)
self.b2 -= learning_rate * np.sum(delta2, axis=0)
self.w1 -= learning_rate * np.dot(input_data.T, delta1)
self.b1 -= learning_rate * np.sum(delta1, axis=0)
def train(self, input_data, output_data, learning_rate, epoch):
# 训练
for i in range(epoch):
output_predict = self.forward(input_data)
self.backward(input_data, output_data, output_predict, learning_rate)
if __name__ == '__main__':
input_data = np.array([[0, 0, 1, 1], [0, 1, 0, 1]]).T
output_data = np.array([[0, 1], [1, 0], [1, 0], [0, 1]]).T
bpnn = BPNN(4, 5, 2)
bpnn.train(input_data, output_data, 0.1, 10000)
# 预测
print(bpnn.forward(np.array([[0, 0, 1, 1]]))) # [0.03203344, 0.94774756]
```
这个代码实现了一个具有四个输入和两个输出的BP神经网络。其中,我们使用sigmoid函数作为激活函数,采用随机梯度下降法进行参数优化。在样例中,我们使用该神经网络实现异或逻辑运算。
阅读全文