首页 > 编程笔记 > Python笔记 阅读:7

神经网络是什么意思(附带实例)

神经网络是深度学习的基础,它试图模拟人脑的神经元网络,以实现对复杂模式的学习。本节讲介绍神经网络的各个组成部分,以及如何训练一个神经网络模型。

首先,我们需要了解神经网络的基本构成单元——神经元。在神经网络中,神经元一般有多个输入和一个输出。每个输入都有对应的权重,这些输入进行加权后,加上偏置值形成神经元的净输入。通过激活函数转换净输入,即可得到神经元的输出。这个过程可以被看作模型从数据中学习特征。

激活函数的主要目的是引入非线性因素到神经网络中,这样神经网络就可以解决复杂的问题了,如识别和理解语音、图像等数据,这些问题通常不能通过简单的线性模型解决。如果没有激活函数,则无论网络有多少层,最终输出都将是输入的线性组合,这将大大限制神经网络的表达能力。

常见的激活函数包括 Sigmoid、tanh、ReLU(Rectified Linear Unit)、Leaky ReLU、ELU(Exponential Linear Units)等:
通过激活函数,神经网络能学习并执行更复杂的任务。

神经网络的训练是通过优化权重和偏置值完成的,其目标是最小化损失函数(Loss Function)。在机器学习和统计学中,损失函数用量化模型预测结果与真实数据之间的差异。也就是说,损失函数可以衡量模型的预测错误程度。通过最小化损失函数,我们可以找到模型的最优参数。

常见的损失函数有以下两种:
下面,看一个简单的神经网络示例。

假设有一个二分类问题,输入是两个特征,输出是类别 0 或类别 1。我们可以构建一个包含一个隐藏层的简单神经网络解决这个问题。隐藏层包含两个神经元,使用 Sigmoid 函数作为激活函数;输出层包含一个神经元,同样使用 Sigmoid 函数作为激活函数。损失函数选择交叉熵损失。代码如下:
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.neural_network import MLPClassifier

# 生成二分类问题的数据
X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, random_state=123)

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)

# 构建神经网络模型
model = MLPClassifier(hidden_layer_sizes=(2, ), activation='logistic', solver='sgd', learning_rate_init=0.01, max_iter=500)

# 训练模型
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估
print("Accuracy: ", accuracy_score(y_test, y_pred))
在神经网络中,隐藏层是输入层和输出层之间的一层或多层,这些层的功能是将输入数据进行非线性转换,并将这些转换后的数据传递给下一层,直到输出层。

隐藏层中的每一个神经元都会接收来自上一层所有神经元的输入,并对这些输入进行加权求和,然后通过一个激活函数进行非线性变换,最后输出结果。

运行结果为:
D:\深度学习>python 神经网络.py
D:\softWare\Python_3.11.4\Lib\site-packages\sklearn\neural_network\multilayer_perceptron.py:686: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet.
  warnings.warn(
Accuracy:  0.75
D:\深度学习>
下面对上述代码中的细节进行介绍。
通过上述讨论,读者应该对神经网络有了基本的理解。需要注意,神经网络是一个非常复杂的领域,还有许多细节需要进一步学习和实践。

相关文章