mlp神经网络python代码
时间: 2023-06-24 21:03:40 浏览: 41
下面是一个简单的 MLP (多层感知器)神经网络的 Python 代码,用于分类问题:
```python
import numpy as np
class MLP:
def __init__(self, input_size, hidden_size, output_size, lr=0.1):
self.input_size = input_size
self.hidden_size = hidden_size
self.output_size = output_size
self.lr = lr
self.W1 = np.random.randn(self.input_size, self.hidden_size)
self.b1 = np.random.randn(self.hidden_size)
self.W2 = np.random.randn(self.hidden_size, self.output_size)
self.b2 = np.random.randn(self.output_size)
def forward(self, X):
self.z1 = np.dot(X, self.W1) + self.b1
self.a1 = np.tanh(self.z1)
self.z2 = np.dot(self.a1, self.W2) + self.b2
self.a2 = self.softmax(self.z2)
return self.a2
def backward(self, X, y, y_pred):
delta3 = y_pred - y
dW2 = np.dot(self.a1.T, delta3)
db2 = np.sum(delta3, axis=0)
delta2 = np.dot(delta3, self.W2.T) * (1 - np.power(self.a1, 2))
dW1 = np.dot(X.T, delta2)
db1 = np.sum(delta2, axis=0)
self.W2 -= self.lr * dW2
self.b2 -= self.lr * db2
self.W1 -= self.lr * dW1
self.b1 -= self.lr * db1
def train(self, X, y, epochs):
for i in range(epochs):
y_pred = self.forward(X)
self.backward(X, y, y_pred)
def predict(self, X):
y_pred = self.forward(X)
return np.argmax(y_pred, axis=1)
def softmax(self, x):
e_x = np.exp(x - np.max(x))
return e_x / e_x.sum(axis=1, keepdims=True)
```
在这个代码中,我们使用了 numpy 库来进行矩阵运算。构造函数定义了网络的结构和学习率,并初始化了权重和偏置。forward 方法计算网络的输出,并使用 softmax 激活函数将输出转换为概率。backward 方法根据误差计算梯度,并使用梯度下降法更新权重和偏置。train 方法用于训练网络,predict 方法用于预测输出。