主页 > 互联网  > 

人工神经网络(ArtificialNeuralNetwork,ANN)详细解释(带示例)

人工神经网络(ArtificialNeuralNetwork,ANN)详细解释(带示例)

目录

基本概念

神经元模型

激活函数

网络结构

训练过程

示例

Python 案例

代码解释


基本概念

人工神经网络是一种模仿人类神经系统的计算模型,由大量的神经元(也称为节点)相互连接组成。这些神经元按照层次结构排列,通常包括输入层、隐藏层和输出层。信息在网络中从输入层传递到隐藏层,再到输出层,在这个过程中,神经元之间通过加权连接进行信息传递和处理。

神经元模型

神经元是神经网络的基本计算单元,其工作原理类似于生物神经元。每个神经元接收多个输入信号,将这些输入信号乘以对应的权重,然后求和,再经过一个激活函数处理,产生输出。数学表达式为: 其中, 是输入信号,是对应的权重, 是偏置,是激活函数, 是输出。

激活函数

激活函数的作用是引入非线性因素,使得神经网络能够学习复杂的非线性关系。常见的激活函数有:

Sigmoid 函数:,输出范围在之间,常用于二分类问题。ReLU 函数:,计算简单,能有效缓解梯度消失问题,在深度学习中广泛应用。Tanh 函数:,输出范围在之间。 网络结构 输入层:接收外部输入数据,神经元的数量通常等于输入特征的数量。隐藏层:可以有一个或多个,隐藏层中的神经元对输入数据进行特征提取和转换,层数越多,网络的表达能力越强,但也越容易过拟合。输出层:输出网络的预测结果,神经元的数量根据具体任务而定,例如二分类问题通常有 1 个输出神经元,多分类问题的输出神经元数量等于类别数。 训练过程

神经网络的训练过程主要是通过调整神经元之间的权重和偏置,使得网络的输出尽可能接近真实标签。常用的训练算法是反向传播算法(Backpropagation),其基本步骤如下:

前向传播:将输入数据传入网络,依次计算各层神经元的输出,直到得到输出层的预测结果。计算损失:使用损失函数(如均方误差、交叉熵损失等)计算预测结果与真实标签之间的差异。反向传播:根据损失函数的梯度,从输出层开始,逐层计算每个神经元的梯度,以确定权重和偏置的调整方向。参数更新:使用优化算法(如随机梯度下降、Adam 等)根据计算得到的梯度更新权重和偏置。 示例

假设我们要构建一个简单的神经网络来识别手写数字(MNIST 数据集)。输入层有 784 个神经元(因为每个手写数字图像是 28x28 像素,展开后是 784 维向量),隐藏层可以设置为 128 个神经元,输出层有 10 个神经元(对应 0 - 9 这 10 个数字类别)。训练过程中,网络通过不断调整权重和偏置,学习如何从输入的图像数据中提取特征,从而准确预测图像对应的数字。

Python 案例

以下是使用 Python 和 Keras 库构建一个简单的全连接神经网络来对 MNIST 手写数字进行分类的示例:

import tensorflow as tf from tensorflow import keras import numpy as np import matplotlib.pyplot as plt # 加载MNIST数据集 mnist = keras.datasets.mnist (train_images, train_labels), (test_images, test_labels) = mnist.load_data() # 数据预处理 train_images = train_images.reshape((60000, 28 * 28)) train_images = train_images / 255.0 test_images = test_images.reshape((10000, 28 * 28)) test_images = test_images / 255.0 # 构建神经网络模型 model = keras.Sequential([ keras.layers.Dense(128, activation='relu', input_shape=(28 * 28,)), keras.layers.Dense(10, activation='softmax') ]) # 编译模型 model pile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(train_images, train_labels, epochs=5) # 评估模型 test_loss, test_acc = model.evaluate(test_images, test_labels) print(f"Test accuracy: {test_acc}") # 进行预测 predictions = model.predict(test_images) # 显示预测结果示例 def plot_image(i, predictions_array, true_label, img): predictions_array, true_label, img = predictions_array, true_label[i], img[i] plt.grid(False) plt.xticks([]) plt.yticks([]) img = img.reshape(28, 28) plt.imshow(img, cmap=plt.cm.binary) predicted_label = np.argmax(predictions_array) if predicted_label == true_label: color = 'blue' else: color = 'red' plt.xlabel(f"{predicted_label} {100 * np.max(predictions_array):2.0f}% ({true_label})", color=color) def plot_value_array(i, predictions_array, true_label): predictions_array, true_label = predictions_array, true_label[i] plt.grid(False) plt.xticks(range(10)) plt.yticks([]) thisplot = plt.bar(range(10), predictions_array, color="#777777") plt.ylim([0, 1]) predicted_label = np.argmax(predictions_array) thisplot[predicted_label].set_color('red') thisplot[true_label].set_color('blue') num_rows = 5 num_cols = 3 num_images = num_rows * num_cols plt.figure(figsize=(2 * 2 * num_cols, 2 * num_rows)) for i in range(num_images): plt.subplot(num_rows, 2 * num_cols, 2 * i + 1) plot_image(i, predictions[i], test_labels, test_images) plt.subplot(num_rows, 2 * num_cols, 2 * i + 2) plot_value_array(i, predictions[i], test_labels) plt.tight_layout() plt.show() 代码解释 数据加载与预处理:使用 keras.datasets.mnist.load_data() 加载 MNIST 数据集,将图像数据从二维矩阵转换为一维向量,并将像素值归一化到 0 - 1 之间。模型构建:使用 keras.Sequential 构建一个简单的全连接神经网络,包含一个有 128 个神经元的隐藏层(使用 ReLU 激活函数)和一个有 10 个神经元的输出层(使用 Softmax 激活函数)。模型编译:使用 model pile 配置模型的优化器(Adam)、损失函数(sparse_categorical_crossentropy)和评估指标(准确率)。模型训练:使用 model.fit 对模型进行训练,设置训练轮数为 5。模型评估:使用 model.evaluate 评估模型在测试集上的性能。预测与可视化:使用 model.predict 对测试集进行预测,并通过绘图函数可视化预测结果。
标签:

人工神经网络(ArtificialNeuralNetwork,ANN)详细解释(带示例)由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“人工神经网络(ArtificialNeuralNetwork,ANN)详细解释(带示例)