前馈神经网络python实现
时间: 2023-07-08 12:51:20 浏览: 107
以下是一个简单的前馈神经网络的Python实现,可以用来解决二分类问题:
```python
import numpy as np
class NeuralNetwork:
def __init__(self, input_size, hidden_size, output_size):
# 初始化权重矩阵
self.W1 = np.random.randn(input_size, hidden_size)
self.W2 = np.random.randn(hidden_size, output_size)
def sigmoid(self, x):
# sigmoid函数
return 1 / (1 + np.exp(-x))
def forward(self, X):
# 前向传播
self.z1 = np.dot(X, self.W1)
self.a1 = self.sigmoid(self.z1)
self.z2 = np.dot(self.a1, self.W2)
y_hat = self.sigmoid(self.z2)
return y_hat
def sigmoid_derivative(self, x):
# sigmoid函数的导数
return x * (1 - x)
def backward(self, X, y, y_hat, learning_rate):
# 反向传播
delta2 = (y - y_hat) * self.sigmoid_derivative(y_hat)
dW2 = np.dot(self.a1.T, delta2)
delta1 = np.dot(delta2, self.W2.T) * self.sigmoid_derivative(self.a1)
dW1 = np.dot(X.T, delta1)
# 更新权重矩阵
self.W2 += learning_rate * dW2
self.W1 += learning_rate * dW1
def train(self, X, y, learning_rate, epochs):
# 训练模型
for i in range(epochs):
y_hat = self.forward(X)
self.backward(X, y, y_hat, learning_rate)
def predict(self, X):
# 预测
y_hat = self.forward(X)
return np.round(y_hat)
```
其中,`input_size`、`hidden_size`和`output_size`分别表示输入层、隐藏层和输出层的神经元数量;`sigmoid`、`sigmoid_derivative`和`forward`方法分别实现sigmoid函数、sigmoid函数的导数和前向传播;`backward`方法实现反向传播和权重更新;`train`方法用于训练模型,其中`X`表示训练数据的特征矩阵,`y`表示训练数据的标签,`learning_rate`表示学习率,`epochs`表示迭代次数;`predict`方法用于预测,其中`X`表示测试数据的特征矩阵,返回预测结果。
阅读全文