基于python的BP神经网络实现类别预测代码
时间: 2023-07-12 17:49:03 浏览: 97
以下是一个基于Python的BP神经网络的分类预测示例代码,你可以根据自己的需要进行修改和调整:
```python
import numpy as np
# 定义sigmoid激活函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义softmax激活函数
def softmax(x):
exp_x = np.exp(x)
return exp_x / np.sum(exp_x, axis=0)
# 定义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 = softmax(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(hidden_errors, inputs.T)
# 查询网络
def query(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 = softmax(final_inputs)
return final_outputs
```
这是一个简单的BP神经网络分类预测实现,你可以通过调整参数和增加层数等方式来优化模型性能。在此示例中,我们使用了softmax激活函数来输出类别的概率分布,因为它适用于多分类问题。
阅读全文