下面是详细讲解“用Python实现BP神经网络(附代码)”的完整攻略,包含两个示例说明。
BP神经网络简介
BP神经网络是一种常见的人工神经网络,用于解决分类和回归问题。BP神经网络由输入层、隐藏层和输出层组成,通过反向传播算法来训练网络。
用Python实现BP神经网络
下面是Python实现BP神经网络的代码:
import numpy as np
class BPNeuralNetwork:
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.weights1 = np.random.randn(self.input_size, self.hidden_size)
self.weights2 = np.random.randn(self.hidden_size, self.output_size)
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(self, x):
return x * (1 - x)
def forward(self, X):
self.hidden_layer = self.sigmoid(np.dot(X, self.weights1))
self.output_layer = self.sigmoid(np.dot(self.hidden_layer, self.weights2))
return self.output_layer
def backward(self, X, y, output):
output_error = y - output
output_delta = output_error * self.sigmoid_derivative(output)
hidden_error = np.dot(output_delta, self.weights2.T)
hidden_delta = hidden_error * self.sigmoid_derivative(self.hidden_layer)
self.weights2 += np.dot(self.hidden_layer.T, output_delta)
self.weights1 += np.dot(X.T, hidden_delta)
def train(self, X, y, epochs):
for i in range(epochs):
output = self.forward(X)
self.backward(X, y, output)
def predict(self, X):
return self.forward(X)
BPNeuralNetwork
类实现了BP神经网络。sigmoid
函数和sigmoid_derivative
函数分别计算sigmoid函数和其导数。forward
函数计算前向传播。backward
函数计算反向传播。train
函数训练神经网络。predict
函数预测输出。
示例1:使用BP神经网络解决XOR问题
让我们使用BP神经网络解决XOR问题:
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]])
nn = BPNeuralNetwork(2, 3, 1)
nn.train(X, y, 10000)
print(nn.predict(X))
这将输出神经网络的预测结果。
示例2:使用BP神经网络解决鸢尾花分类问题
让我们使用BP神经网络解决鸢尾花分类问题:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
iris = load_iris()
X = iris.data
y = iris.target.reshape(-1, 1)
encoder = OneHotEncoder(sparse=False)
y = encoder.fit_transform(y)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
nn = BPNeuralNetwork(4, 5, 3)
nn.train(X_train, y_train, 10000)
print(nn.predict(X_test))
这将输出神经网络的预测结果。
希望这个攻略能够帮助你理解如何使用Python实现BP神经网络!