写一段神经网络、反向传播的二分类应用代码
时间: 2024-05-03 19:19:32 浏览: 16
好的,以下是一个简单的二分类神经网络反向传播的 Python 代码:
```python
import numpy as np
class NeuralNetwork:
def __init__(self, num_input, num_hidden, num_output):
self.num_input = num_input
self.num_hidden = num_hidden
self.num_output = num_output
self.weights1 = np.random.randn(self.num_input, self.num_hidden)
self.weights2 = np.random.randn(self.num_hidden, self.num_output)
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(self, x):
return x * (1 - x)
def forward(self, X):
self.hidden_layer = np.dot(X, self.weights1)
self.hidden_layer_activation = self.sigmoid(self.hidden_layer)
self.output_layer = np.dot(self.hidden_layer_activation, self.weights2)
self.output_layer_activation = self.sigmoid(self.output_layer)
return self.output_layer_activation
def backward(self, X, y, output):
error = y - output
d_output = error * self.sigmoid_derivative(output)
error_hidden = d_output.dot(self.weights2.T)
d_hidden = error_hidden * self.sigmoid_derivative(self.hidden_layer_activation)
self.weights1 += X.T.dot(d_hidden)
self.weights2 += self.hidden_layer_activation.T.dot(d_output)
def train(self, X, y, iterations):
for i in range(iterations):
output = self.forward(X)
self.backward(X, y, output)
def predict(self, X):
output = self.forward(X)
predictions = []
for i in range(len(output)):
if output[i] >= 0.5:
predictions.append(1)
else:
predictions.append(0)
return predictions
```
使用方法如下所示:
```python
# 初始化神经网络
nn = NeuralNetwork(2, 3, 1)
# 训练数据集
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]])
# 训练神经网络
nn.train(X, y, 5000)
# 预测结果
predictions = nn.predict(X)
print(predictions)
```
其中,`num_input` 表示输入层的神经元数量,`num_hidden` 表示隐藏层的神经元数量,`num_output` 表示输出层的神经元数量。`sigmoid()` 是 sigmoid 函数,`sigmoid_derivative()` 是 sigmoid 函数的导数,`forward()` 是前向传播函数,`backward()` 是反向传播函数,`train()` 是训练函数,`predict()` 是预测函数。在训练过程中,我们采用了梯度下降算法来更新权重。