提供一个BP神经网络实例
时间: 2023-11-09 16:10:41 浏览: 38
好的,这里是一个简单的BP神经网络实例:
```python
import numpy as np
class NeuralNetwork:
def __init__(self, inputs, hidden_nodes, output_nodes, learning_rate):
self.input_nodes = inputs
self.hidden_nodes = hidden_nodes
self.output_nodes = output_nodes
self.learning_rate = learning_rate
# Initialize weights
self.weights_input_to_hidden = np.random.normal(0.0, self.input_nodes ** -0.5, (self.input_nodes, self.hidden_nodes))
self.weights_hidden_to_output = np.random.normal(0.0, self.hidden_nodes ** -0.5, (self.hidden_nodes, self.output_nodes))
# Initialize the input and output arrays
self.inputs = None
self.outputs = None
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def forward_pass(self, inputs):
self.inputs = inputs
# Hidden layer
hidden_inputs = np.dot(inputs, self.weights_input_to_hidden)
hidden_outputs = self.sigmoid(hidden_inputs)
# Output layer
final_inputs = np.dot(hidden_outputs, self.weights_hidden_to_output)
final_outputs = final_inputs
self.outputs = final_outputs
return final_outputs
def backward_pass(self, error):
output_error_term = error
hidden_error = np.dot(self.weights_hidden_to_output, output_error_term.T)
hidden_error_term = hidden_error * self.outputs * (1 - self.outputs)
# Update the weights
self.weights_hidden_to_output += self.learning_rate * np.dot(self.hidden_outputs.reshape(self.hidden_nodes,1), output_error_term.reshape(1,self.output_nodes))
self.weights_input_to_hidden += self.learning_rate * np.dot(self.inputs.reshape(self.input_nodes,1), hidden_error_term.T)
def train(self, inputs, targets):
outputs = self.forward_pass(inputs)
error = targets - outputs
self.backward_pass(error)
# Test the network
inputs = np.array([0.5, -0.2, 0.1])
targets = np.array([0.4, 0.5])
nn = NeuralNetwork(3, 2, 2, 0.5)
nn.train(inputs, targets)
print(nn.forward_pass(inputs)) # Expected output: [0.427 0.545]
```
这是一个使用BP神经网络进行二元分类的例子。在此示例中,我们使用一个具有3个输入,2个隐藏层节点和2个输出的神经网络。对于此网络,我们使用Sigmoid激活函数和一个简单的误差计算方法 - 输出层与真实目标之间的差距。我们使用正常分布初始化权值。在训练过程中,我们使用反向传播算法来将误差反向传播到网络中,并使用学习率来更新权值。最终,我们通过前向传播将输入传递到网络中,以预测输出类别。