当前位置: 首页> 财经> 访谈 > 小程序开发定制制作_义乌小商品批发网app下载_在线注册免费域名_百度信息流广告怎么收费

小程序开发定制制作_义乌小商品批发网app下载_在线注册免费域名_百度信息流广告怎么收费

时间:2025/7/13 6:19:58来源:https://blog.csdn.net/qq_56683019/article/details/143274951 浏览次数:0次
小程序开发定制制作_义乌小商品批发网app下载_在线注册免费域名_百度信息流广告怎么收费

目录

BP算法的基本原理

1. 前向传播

2. 反向传播

BP算法的步骤总结

BP算法的Python实现

代码说明


        BP(Backpropagation,反向传播)是一种用于神经网络训练的算法,通过计算损失函数相对于每个权重的梯度,并调整网络权重以最小化误差。BP算法是监督学习的核心优化方法之一,广泛应用于深度学习和机器学习模型的训练。


BP算法的基本原理

        BP算法主要分为两步:前向传播反向传播

1. 前向传播

        在前向传播中,数据从输入层经过隐藏层传递到输出层,每层神经元通过激活函数将输入数据映射为输出:

a^{(l+1)} = f(W^{(l)} a^{(l)} + b^{(l)})

其中:

  • a^{(l)} 是第 l 层的输出(第 l+1 层的输入)。
  • W^{(l)} 是第 l 层的权重矩阵。
  • b^{(l)} 是第 l 层的偏置。
  • f 是激活函数。

        前向传播的最终输出通过损失函数 L 与真实标签进行比较,计算得到误差(损失值):

L = \text{loss}(\hat{y}, y)

2. 反向传播

        反向传播主要是计算误差关于权重的梯度。利用链式法则,BP算法逐层计算损失函数对各层权重和偏置的偏导数(梯度),更新网络参数以最小化误差。具体步骤如下:

  1. 计算输出层的误差:对于输出层,误差定义为损失函数对输出的偏导数:

    \delta^{(L)} = \frac{\partial L}{\partial a^{(L)}} \cdot f'(z^{(L)})
  2. 计算隐藏层的误差:误差逐层向前传播,根据链式法则计算隐藏层的误差:

    \delta^{(l)} = \left(W^{(l+1)}\right)^T \delta^{(l+1)} \cdot f'(z^{(l)})
  3. 更新权重和偏置:利用梯度下降算法,根据学习率 \eta 更新权重和偏置:

    W^{(l)} = W^{(l)} - \eta \cdot \frac{\partial L}{\partial W^{(l)}}                              b^{(l)} = b^{(l)} - \eta \cdot \frac{\partial L}{\partial b^{(l)}}

BP算法的步骤总结

  1. 前向传播计算输出和损失。
  2. 反向传播计算每层的梯度。
  3. 更新网络权重和偏置。
  4. 重复以上过程,直到达到收敛条件。

BP算法的Python实现

        以下是一个简单的两层神经网络的BP算法实现,用于演示如何利用反向传播训练网络。

import numpy as np# 激活函数(Sigmoid)及其导数
def sigmoid(x):return 1 / (1 + np.exp(-x))def sigmoid_derivative(x):return x * (1 - x)# 创建一个简单的两层神经网络
class NeuralNetwork:def __init__(self, input_size, hidden_size, output_size, learning_rate=0.1):# 初始化权重和偏置self.W1 = np.random.rand(input_size, hidden_size)self.b1 = np.zeros((1, hidden_size))self.W2 = np.random.rand(hidden_size, output_size)self.b2 = np.zeros((1, output_size))self.learning_rate = learning_ratedef forward(self, X):# 前向传播self.z1 = np.dot(X, self.W1) + self.b1self.a1 = sigmoid(self.z1)self.z2 = np.dot(self.a1, self.W2) + self.b2self.a2 = sigmoid(self.z2)return self.a2def backward(self, X, y, output):# 计算误差error = output - y# 输出层的梯度d_z2 = error * sigmoid_derivative(output)d_W2 = np.dot(self.a1.T, d_z2)d_b2 = np.sum(d_z2, axis=0, keepdims=True)# 隐藏层的梯度d_a1 = np.dot(d_z2, self.W2.T)d_z1 = d_a1 * sigmoid_derivative(self.a1)d_W1 = np.dot(X.T, d_z1)d_b1 = np.sum(d_z1, axis=0, keepdims=True)# 更新权重和偏置self.W1 -= self.learning_rate * d_W1self.b1 -= self.learning_rate * d_b1self.W2 -= self.learning_rate * d_W2self.b2 -= self.learning_rate * d_b2def train(self, X, y, epochs=10000):for epoch in range(epochs):# 前向传播output = self.forward(X)# 反向传播self.backward(X, y, output)if epoch % 1000 == 0:loss = np.mean((y - output) ** 2)print(f"Epoch {epoch} Loss: {loss}")# 使用神经网络
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]])  # XOR问题# 初始化网络
nn = NeuralNetwork(input_size=2, hidden_size=4, output_size=1)
nn.train(X, y, epochs=10000)# 测试
print("Predictions:")
print(nn.forward(X))

代码说明

  • forward方法:执行前向传播,计算网络输出。
  • backward方法:执行反向传播,计算并更新权重和偏置。
  • train方法:用于训练网络,通过前向传播和反向传播迭代优化。

        BP算法是深度学习中极为重要的一部分,有助于多层神经网络高效训练复杂的模型。

关键字:小程序开发定制制作_义乌小商品批发网app下载_在线注册免费域名_百度信息流广告怎么收费

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: