bp神经网络python并输出准确率
时间: 2024-02-02 21:46:47 浏览: 221
python实现bp神经网络
4星 · 用户满意度95%
首先,需要准备好训练数据和测试数据。然后,使用Python编写BP神经网络模型,训练模型并测试准确率。
以下是一个简单的示例代码:
```
import numpy as np
# 定义sigmoid函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义BP神经网络类
class BPNeuralNetwork:
def __init__(self, input_nodes, hidden_nodes, output_nodes, learning_rate):
self.input_nodes = input_nodes
self.hidden_nodes = hidden_nodes
self.output_nodes = output_nodes
self.learning_rate = learning_rate
self.weights_input_hidden = np.random.normal(0.0, self.input_nodes ** -0.5, (self.input_nodes, self.hidden_nodes))
self.weights_hidden_output = np.random.normal(0.0, self.hidden_nodes ** -0.5, (self.hidden_nodes, self.output_nodes))
# 训练模型
def train(self, inputs_list, targets_list):
inputs = np.array(inputs_list, ndmin=2).T
targets = np.array(targets_list, ndmin=2).T
# 前向传播
hidden_inputs = np.dot(self.weights_input_hidden.T, inputs)
hidden_outputs = sigmoid(hidden_inputs)
final_inputs = np.dot(self.weights_hidden_output.T, hidden_outputs)
final_outputs = sigmoid(final_inputs)
# 反向传播
output_errors = targets - final_outputs
hidden_errors = np.dot(self.weights_hidden_output, output_errors) * hidden_outputs * (1 - hidden_outputs)
self.weights_hidden_output += self.learning_rate * np.dot(hidden_outputs, output_errors.T)
self.weights_input_hidden += self.learning_rate * np.dot(inputs, hidden_errors.T)
# 预测
def predict(self, inputs_list):
inputs = np.array(inputs_list, ndmin=2).T
# 前向传播
hidden_inputs = np.dot(self.weights_input_hidden.T, inputs)
hidden_outputs = sigmoid(hidden_inputs)
final_inputs = np.dot(self.weights_hidden_output.T, hidden_outputs)
final_outputs = sigmoid(final_inputs)
return final_outputs
# 准备训练数据和测试数据
inputs_train = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
targets_train = np.array([[0], [1], [1], [0]])
inputs_test = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
targets_test = np.array([[0], [1], [1], [0]])
# 创建BP神经网络模型并训练
nn = BPNeuralNetwork(2, 4, 1, 0.1)
for i in range(5000):
nn.train(inputs_train, targets_train)
# 测试准确率
num_correct = 0
for i in range(len(inputs_test)):
output = nn.predict(inputs_test[i])
if abs(output - targets_test[i]) < 0.5:
num_correct += 1
accuracy = float(num_correct) / float(len(inputs_test))
print("准确率:", accuracy)
```
在上面的示例代码中,我们使用了一个包含一个隐藏层和一个输出层的BP神经网络模型,并使用sigmoid作为激活函数。训练数据和测试数据都是XOR问题的数据,我们使用训练数据来训练模型,并使用测试数据来计算准确率。最后输出准确率。
阅读全文