用Python实现BP神经网络(附代码)

  • Post category:Python

下面是详细讲解“用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神经网络!