sklearn库 bp神经网络[从原理到代码一篇搞定](2)

您所在的位置:网站首页 bp神经网络构建原理图解 sklearn库 bp神经网络[从原理到代码一篇搞定](2)

sklearn库 bp神经网络[从原理到代码一篇搞定](2)

#sklearn库 bp神经网络[从原理到代码一篇搞定](2)| 来源: 网络整理| 查看: 265

什么是bp神经网络

BP神经网络,即反向传播神经网络(Backpropagation Neural Network),是一种广泛应用于分类、回归和聚类等任务的人工神经网络。

bp神经网络的结构

BP神经网络的基本结构包含三层:输入层、隐含层和输出层。其中,输入层接受输入数据,隐含层和输出层由若干个神经元组成。每个神经元与前一层的每个神经元相连,并带有权重。当输入数据通过神经网络时,每个神经元将加权输入相加,并通过一个激活函数进行非线性变换,然后将输出传递到下一层神经元。这样逐层传递后,最后输出层将产生一个输出结果。

BP神经网络的训练过程是基于误差反向传播算法(Backpropagation),即通过反向传播误差来更新每个神经元的权重值,以减小网络输出与真实输出之间的误差。误差计算的目标函数通常是平方误差或交叉熵误差。

激活函数

在神经网络中,激活函数(Activation Function)是一种将输入信号转换为输出信号的非线性函数。它在神经元中起到非线性映射的作用,可以增强神经网络的表示能力和学习能力。 以下是常用的激活函数及其表达式:

sigmoid函数 f ( x ) = 1 1 + e − x f(x) = \frac{1}{1+e^{-x}} f(x)=1+e−x1​ sigmoid函数的输出值在0到1之间,具有平滑的S形曲线。它在二元分类和神经网络中的某些层次中经常使用,但由于其存在梯度消失的问题,逐渐被ReLU等激活函数所取代。

tanh函数 f ( x ) = e x − e − x e x + e − x f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} f(x)=ex+e−xex−e−x​ tanh函数也是一种S形曲线函数,其输出值在**-1到1**之间。它相比sigmoid函数具有更大的梯度,但在面对大量输入时,tanh函数仍然存在梯度消失的问题。

ReLU函数 在这里插入图片描述

ReLU函数在输入为正数时直接输出该值,否则输出0。相较于sigmoid和tanh函数,ReLU函数的计算速度更快,且不存在梯度消失问题。因此,它被广泛应用于深度神经网络中。

损失函数

损失函数是用来衡量模型预测结果与实际结果之间的差异的函数。在神经网络中,损失函数通常用于评估模型的性能,从而优化模型参数以提高预测准确度。

不同的任务可能需要使用不同的损失函数。下面是一些常见的损失函数:

均方误差(Mean Squared Error,MSE):适用于回归问题,表示预测值与真实值之间的平方差的平均值。表达式为: 在这里插入图片描述 其中 n n n 表示样本数量, y i y_i yi​ 表示真实值, y i ^ \hat{y_i} yi​^​ 表示模型的预测值。

交叉熵(Cross Entropy,CE):适用于分类问题,表示预测值与真实值之间的差异。表达式为: 在这里插入图片描述 其中 n n n 表示样本数量, M M M 表示类别数量, y i j y_{ij} yij​ 表示第 i i i 个样本的真实标签, y i j ^ \hat{y_{ij}} yij​^​ 表示模型预测的第 i i i 个样本属于第 j j j 个类别的概率。

交叉熵的二分类形式(Binary Cross Entropy,BCE):适用于二分类问题,表达式为: 在这里插入图片描述 其中 n n n 表示样本数量, y i y_i yi​ 表示第 i i i 个样本的真实标签(取值为 0 0 0 或 1 1 1), y i ^ \hat{y_i} yi​^​ 表示模型预测的第 i i i 个样本属于第一个类别(即标签为 1 1 1)的概率。

模型的超参数

超参数是在训练神经网络模型时需要手动设置的参数,它们不是通过训练数据学习得到的。设置不当的超参数可能会导致模型表现不佳。以下是一些常见的超参数:

1.学习率(Learning Rate):指定每次更新模型参数时的步长大小,即模型参数在每次迭代中更新的幅度。学习率过小会导致模型收敛速度过慢,学习率过大可能会导致模型不稳定。

2.批量大小(Batch Size):指定每次更新模型参数时使用的样本数量。较小的批量大小可以使模型更快地收敛,但会增加模型的方差;较大的批量大小可以减少模型的方差,但会使模型收敛速度较慢。

3.迭代次数(Number of Iterations):指定训练模型时的迭代次数。迭代次数过少可能会导致模型欠拟合,迭代次数过多可能会导致模型过拟合。

4.正则化系数(Regularization Coefficient):指定用于控制模型复杂度的正则化系数。正则化可以有效减少过拟合问题,但正则化系数过大可能会导致欠拟合问题。

5.隐藏层大小(Size of Hidden Layers):指定**隐藏层中神经元的数量。**较大的隐藏层可以使模型更好地拟合训练数据,但也可能导致过拟合问题。

6.优化算法(Optimization Algorithm):指定用于更新模型参数的优化算法,如随机梯度下降(Stochastic Gradient Descent,SGD)、Adam、Adagrad 等。不同的优化算法对模型性能的影响不同,需要根据具体情况选择。

bp神经网络的基本步骤

1.前向传播:将训练数据输入神经网络,计算网络输出。

2.计算误差:将网络输出与真实输出比较,计算误差。

3.反向传播误差:从输出层开始,将误差反向传播回每个神经元,计算每个神经元的误差梯度。

4.更新权重:根据误差梯度和学习率更新每个神经元的权重值。

重复以上步骤,直到网络的误差满足要求或达到最大训练次数。

BP神经网络的优点是能够对非线性模式进行拟合,并且可以应用于多种任务。缺点是需要大量的训练数据和计算资源,并且容易过拟合。因此,在实际应用中,需要根据具体任务选择合适的网络结构、参数和优化算法,以提高网络的性能和泛化能力。

基于sklearn库的bp神经网络具体案例

下面是基于bp神经网络的鸢尾花一例的代码: 参数说明: 其中隐藏层大小为10 最大迭代次数为1000 学习率为0.1(默认) 样本数量自动调整批量大小。 优化算法(solver):默认为"adam",即使用Adam优化算法。 正则化系数(alpha):默认值为0.0001,使用L2正则化。 损失函数是均方误差(默认)

from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neural_network import MLPClassifier from sklearn.metrics import accuracy_score # 加载鸢尾花数据集 iris = load_iris() # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42) # 创建BP神经网络分类器 mlp = MLPClassifier(hidden_layer_sizes=(10,), max_iter=1000, random_state=42) # 训练模型 mlp.fit(X_train, y_train) # 预测测试集 y_pred = mlp.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print("Accuracy:", accuracy)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3