多层感知机python实现
时间: 2023-10-05 10:08:27 浏览: 40
好的,您的问题是多层感知机的python实现。下面是一个基于numpy实现的三层全连接神经网络的代码示例:
```python
import numpy as np
class NeuralNet:
def __init__(self, input_size, hidden_size, output_size):
# 初始化权重和偏置
self.W1 = np.random.rand(input_size, hidden_size) * 0.01
self.b1 = np.zeros((1, hidden_size))
self.W2 = np.random.rand(hidden_size, output_size) * 0.01
self.b2 = np.zeros((1, output_size))
def relu(self, Z):
# ReLU激活函数
A = np.maximum(0, Z)
return A
def softmax(self, Z):
# Softmax激活函数
expZ = np.exp(Z)
return expZ / np.sum(expZ, axis=1, keepdims=True)
def forward(self, X):
# 前向传播
Z1 = np.dot(X, self.W1) + self.b1
A1 = self.relu(Z1)
Z2 = np.dot(A1, self.W2) + self.b2
A2 = self.softmax(Z2)
return A2
def cost(self, A2, Y):
# 损失函数(交叉熵)
m = Y.shape[0]
logprobs = np.multiply(np.log(A2), Y) + np.multiply(np.log(1 - A2), 1 - Y)
cost = -np.sum(logprobs) / m
cost = np.squeeze(cost)
return cost
def backward(self, X, Y, A2):
# 反向传播
m = Y.shape[0]
dZ2 = A2 - Y
dW2 = np.dot(dZ2.T, A1) / m
db2 = np.sum(dZ2, axis=0, keepdims=True) / m
dA1 = np.dot(dZ2, self.W2.T)
dZ1 = np.multiply(dA1, np.int64(A1 > 0))
dW1 = np.dot(X.T, dZ1) / m
db1 = np.sum(dZ1, axis=0, keepdims=True) / m
return dW1, db1, dW2, db2
def update_parameters(self, dW1, db1, dW2, db2, learning_rate):
# 更新权重和偏置
self.W1 -= learning_rate * dW1
self.b1 -= learning_rate * db1
self.W2 -= learning_rate * dW2
self.b2 -= learning_rate * db2
def train(self, X, Y, iterations=1000, learning_rate=0.1):
# 训练模型
for i in range(iterations):
A2 = self.forward(X)
cost = self.cost(A2, Y)
dW1, db1, dW2, db2 = self.backward(X, Y, A2)
self.update_parameters(dW1, db1, dW2, db2, learning_rate)
if i % 100 == 0:
print('Cost after iteration %i: %f' % (i, cost))
```
该实现包括前向传播,反向传播和参数更新等功能,并使用交叉熵作为损失函数。您可以使用该代码实现多层感知机进行分类任务。