基于python的BP神经网络实现从0到1

文章介绍了BP神经网络的基本结构,包括输入层、隐藏层和输出层,以及反向传播算法在训练中的作用。通过sigmoid激活函数和权重更新,网络能学习输入和输出的映射。示例代码展示了如何用Python实现一个简单的BP神经网络模型,并进行训练和预测。
摘要由CSDN通过智能技术生成

BP神经网络是一种前向反馈型神经网络,是一种常用的人工神经网络模型。它的名称来自于反向传播算法(backpropagation algorithm),这是一种训练BP神经网络的优化算法。

BP神经网络由输入层、隐藏层和输出层组成。每一层都由一组神经元(或称节点)组成。每个节点都与前一层中的所有节点相连,并带有一个权重。节点接收来自前一层的输入,并将它们通过一种激活函数进行非线性变换,然后将输出传递到下一层。在输入层,节点接收输入向量,而在输出层,节点输出网络的输出向量。

BP神经网络通过调整权重来最小化网络的误差,从而使网络能够学习输入和输出之间的映射关系。训练过程中,反向传播算法计算网络误差的梯度,并使用梯度下降算法来更新每个节点的权重,以最小化误差。这个过程不断迭代,直到误差最小化或者达到预定的迭代次数。

BP神经网络的实现可以使用现有的深度学习框架,例如TensorFlow、PyTorch、Keras等。这些框架提供了各种层类型和优化算法的实现,同时也提供了高效的计算和并行化的支持,使得开发人员可以轻松地构建和训练BP神经网络模型。


import numpy as np

class NeuralNetwork:
    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(self.input_size, self.hidden_size)
        self.W2 = 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.z2 = np.dot(X, self.W1)
        self.a2 = self.sigmoid(self.z2)
        self.z3 = np.dot(self.a2, self.W2)
        y_hat = self.sigmoid(self.z3)
        return y_hat
    
    def backward(self, X, y, y_hat):
        delta3 = (y_hat - y) * self.sigmoid_derivative(y_hat)
        dW2 = np.dot(self.a2.T, delta3)
        
        delta2 = np.dot(delta3, self.W2.T) * self.sigmoid_derivative(self.a2)
        dW1 = np.dot(X.T, delta2)
        
        return dW1, dW2
    
    def train(self, X, y, epochs, learning_rate):
        for i in range(epochs):
            y_hat = self.forward(X)
            dW1, dW2 = self.backward(X, y, y_hat)
            
            self.W1 -= learning_rate * dW1
            self.W2 -= learning_rate * dW2
    
    def predict(self, X):
        y_hat = self.forward(X)
        return np.round(y_hat)
# 创建一个具有2个输入节点,3个隐藏节点和1个输出节点的神经网络
nn = NeuralNetwork(2, 3, 1)

# 使用训练数据训练神经网络
X_train = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y_train = np.array([[0], [1], [1], [0]])
nn.train(X_train, y_train, epochs=10000, learning_rate=0.1)

# 使用测试数据预测模型输出
X_test = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y_test = np.array([[0], [1], [1], [0]])
y_hat = nn.predict(X_test)
print("Predictions: \n", y_hat)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清纯世纪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值