python实现多层感知器
时间: 2023-06-20 13:07:35 浏览: 60
以下是一个简单的Python代码实现多层感知器:
```python
import numpy as np
class NeuralNetwork:
def __init__(self, layers):
self.layers = layers
self.weights = []
self.biases = []
for i in range(1, len(layers)):
w = np.random.randn(layers[i], layers[i-1])
b = np.random.randn(layers[i], 1)
self.weights.append(w)
self.biases.append(b)
def sigmoid(self, z):
return 1 / (1 + np.exp(-z))
def sigmoid_derivative(self, z):
return self.sigmoid(z) * (1 - self.sigmoid(z))
def feedforward(self, a):
for w, b in zip(self.weights, self.biases):
z = np.dot(w, a) + b
a = self.sigmoid(z)
return a
def backpropagation(self, x, y):
delta_b = [np.zeros(b.shape) for b in self.biases]
delta_w = [np.zeros(w.shape) for w in self.weights]
activation = x
activations = [x]
zs = []
for w, b in zip(self.weights, self.biases):
z = np.dot(w, activation) + b
zs.append(z)
activation = self.sigmoid(z)
activations.append(activation)
delta = (activations[-1] - y) * self.sigmoid_derivative(zs[-1])
delta_b[-1] = delta
delta_w[-1] = np.dot(delta, activations[-2].transpose())
for l in range(2, len(self.layers)):
z = zs[-l]
sp = self.sigmoid_derivative(z)
delta = np.dot(self.weights[-l+1].transpose(), delta) * sp
delta_b[-l] = delta
delta_w[-l] = np.dot(delta, activations[-l-1].transpose())
return (delta_b, delta_w)
def update_mini_batch(self, mini_batch, eta):
delta_b = [np.zeros(b.shape) for b in self.biases]
delta_w = [np.zeros(w.shape) for w in self.weights]
for x, y in mini_batch:
delta_delta_b, delta_delta_w = self.backpropagation(x, y)
delta_b = [db+ddb for db, ddb in zip(delta_b, delta_delta_b)]
delta_w = [dw+ddw for dw, ddw in zip(delta_w, delta_delta_w)]
self.weights = [w-(eta/len(mini_batch))*dw for w, dw in zip(self.weights, delta_w)]
self.biases = [b-(eta/len(mini_batch))*db for b, db in zip(self.biases, delta_b)]
def train(self, training_data, epochs, mini_batch_size, eta):
n = len(training_data)
for j in range(epochs):
np.random.shuffle(training_data)
mini_batches = [training_data[k:k+mini_batch_size] for k in range(0, n, mini_batch_size)]
for mini_batch in mini_batches:
self.update_mini_batch(mini_batch, eta)
def predict(self, x):
return self.feedforward(x)
```
这个代码实现了一个简单的多层感知器,其中包含了前向传播、反向传播、梯度下降和预测等功能。你可以根据自己的需求进行修改和扩展。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)