numpy实现mlp
时间: 2023-10-31 13:07:41 浏览: 278
多层感知机(MLP)是一种常见的神经网络模型,它由多个全连接层组成。在numpy中实现MLP可以分为以下几个步骤:
1. 初始化权重和偏置。可以使用numpy.random.randn()函数生成随机数来初始化权重和偏置。
2. 前向传播。对于每个样本,将输入数据乘以权重矩阵并加上偏置,然后通过激活函数得到输出值。
3. 计算损失函数。可以使用交叉熵损失函数来计算预测值与真实值之间的差异。
4. 反向传播。根据损失函数对权重和偏置求导,然后更新权重和偏置。
5. 重复2-4进行迭代训练。
以下是一个简单的MLP实现的代码示例:
```python
import numpy as np
class MLP:
def __init__(self, input_size, hidden_size, output_size):
self.input_size = input_size
self.hidden_size = hidden_size
self.output_size = output_size
# 初始化权重和偏置
self.W1 = np.random.randn(input_size, hidden_size)
self.b1 = np.zeros(hidden_size)
self.W2 = np.random.randn(hidden_size, output_size)
self.b2 = np.zeros(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 = np.exp(self.z2) / np.sum(np.exp(self.z2), axis=1, keepdims=True)
def backward(self, X, y, learning_rate):
# 计算损失函数
loss = -np.sum(y * np.log(self.a2))
# 反向传播
delta3 = self.a2 - y
delta2 = np.dot(delta3, self.W2.T) * (1 - np.power(self.a1, 2))
dW2 = np.dot(self.a1.T, delta3)
db2 = np.sum(delta3, axis=0)
dW1 = np.dot(X.T, delta2)
db1 = np.sum(delta2, axis=0)
# 更新权重和偏置
self.W2 -= learning_rate * dW2
self.b2 -= learning_rate * db2
self.W1 -= learning_rate * dW1
self.b1 -= learning_rate * db1
return loss
```
阅读全文