使用python写一个有关水质信息的BP网络(8个输入,1个输出,5个隐藏节点)
时间: 2023-11-27 08:53:16 浏览: 26
以下是使用Python编写的基本BP网络,用于水质信息的预测:
```python
import numpy as np
# 定义sigmoid函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义BP神经网络类
class BPNeuralNetwork:
def __init__(self, num_inputs, num_hidden, num_outputs):
self.num_inputs = num_inputs
self.num_hidden = num_hidden
self.num_outputs = num_outputs
# 初始化权重
self.weights_input_hidden = np.random.randn(self.num_inputs, self.num_hidden)
self.weights_hidden_output = np.random.randn(self.num_hidden, self.num_outputs)
# 前向传播
def forward(self, inputs):
hidden_inputs = np.dot(inputs, self.weights_input_hidden)
hidden_outputs = sigmoid(hidden_inputs)
final_inputs = np.dot(hidden_outputs, self.weights_hidden_output)
final_outputs = sigmoid(final_inputs)
return final_outputs
# 反向传播
def backward(self, inputs, targets, outputs, learning_rate):
output_errors = targets - outputs
hidden_errors = np.dot(output_errors, self.weights_hidden_output.T) * hidden_outputs * (1 - hidden_outputs)
self.weights_hidden_output += learning_rate * np.dot(hidden_outputs.T, output_errors)
self.weights_input_hidden += learning_rate * np.dot(inputs.T, hidden_errors)
# 训练BP神经网络
def train(self, inputs, targets, num_iterations, learning_rate):
for i in range(num_iterations):
for j in range(len(inputs)):
inputs_j = np.array(inputs[j], ndmin=2)
targets_j = np.array(targets[j], ndmin=2)
hidden_inputs = np.dot(inputs_j, self.weights_input_hidden)
hidden_outputs = sigmoid(hidden_inputs)
final_inputs = np.dot(hidden_outputs, self.weights_hidden_output)
final_outputs = sigmoid(final_inputs)
self.backward(inputs_j, targets_j, final_outputs, learning_rate)
# 测试BP神经网络
if __name__ == '__main__':
inputs = np.array([[1, 2, 3, 4, 5, 6, 7, 8], [2, 3, 4, 5, 6, 7, 8, 9], [3, 4, 5, 6, 7, 8, 9, 10]])
targets = np.array([[1], [0], [1]])
nn = BPNeuralNetwork(8, 5, 1)
nn.train(inputs, targets, 1000, 0.1)
print(nn.forward([1, 2, 3, 4, 5, 6, 7, 8]))
```
这个BP神经网络有8个输入,5个隐藏节点和1个输出。在这个示例中,我们使用了一个简单的数据集进行训练,即三个输入向量和相应的目标向量。