当前位置: 首页 > news >正文

人工神经网络ANN入门学习笔记1

        研究生写论文需要,先快速学习了机器学习的内容,现在需要继续深入学习人工神经网络ANN的内容,以下是个人的学习笔记,欢迎交流、请多多指正!

        以下是参考的学习资料/网站/笔记来源(侵权删):【ANN回归预测】基于ANN实现多变量预测附Matlab代码_ann实现回归-CSDN博客

ANN人工神经网络:从基础认知到现实理解-CSDN博客

常用神经网络-ANN/CNN/RNN/GAN/Transformer_ann神经网络-CSDN博客

一、基础知识

1.基础概念

人工神经网络 (Artificial Neural Networks, ANN) 是一种强大的非线性建模工具,在多变量预测领域展现出广阔的应用前景。在实际应用中,我们经常需要对多个变量之间的复杂关系进行建模和预测。传统的回归模型在处理非线性关系时往往存在局限性,而ANN凭借其强大的非线性拟合能力,为多变量预测提供了新的思路。

2.ANN回归预测原理

ANN回归模型主要由输入层、隐藏层和输出层组成。

输入层接收多维输入变量,通过神经元之间的连接传递信息,经过隐藏层的多层非线性变换,最终输出预测值。ANN模型通过学习大量训练数据,不断调整神经元之间的权重和阈值,以最小化预测误差,最终实现对目标变量的准确预测。

3.ANN回归预测步骤

3.1 数据预处理

数据清洗:处理缺失值、异常值,并进行数据类型转换。

数据归一化:将数据范围缩放到[0,1]区间,以提高训练效率。

特征工程:根据业务需求选择合适的特征,并进行特征转换或降维。

3.2 模型构建

选择合适的网络结构:根据数据的复杂程度和预测精度要求,调整隐藏层数量、神经元数量以及激活函数。

设置模型参数:例如学习率、迭代次数等。

3.3 模型训练

采用梯度下降算法等优化方法,通过不断调整模型参数,最小化预测误差

使用训练数据集对模型进行训练,并记录训练过程中的误差变化。

3.4 模型评估

利用测试数据集评估模型的泛化能力,计算预测误差,并分析误差分布

通过调整模型参数或网络结构,不断优化模型性能。

4.常用神经网络对比 ANN/CNN/RNN/GAN/Transformer

(参考常用神经网络-ANN/CNN/RNN/GAN/Transformer_ann神经网络-CSDN博客

简介常用实例网络层

ANN

人工

神经网络

Artificial Neural Network,受生物神经网络启发的计算模型,由输入层、一个或多个隐藏层和输出层组成。每层包含若干节点(神经元),节点之间通过带权重的连接(边)相连。ANN通过调整这些权重来学习和预测。

1.手写数字识别;

2.房价预测:

1.输入层:接受输入数据,每个节点对应一个特征。
2.隐藏层:由若干神经元组成,每个神经元通过加权求和及激活函数处理输入。常用的激活函数包括Sigmoid、ReLU、Tanh等。
3.输出层:输出最终结果,神经元数量取决于具体任务(如分类任务中的类别数)。

CNN

卷积

神经网络

Convolutional Neural Network是一种专门用于处理网格数据(如图像)的神经网络。CNN通过卷积层、池化层和全连接层组成,能够有效地捕捉图像的局部特征和空间关系

1.图像分类,ImageNet数据集包含大量标记好的图像,用于训练和评估图像分类模型。ResNet和VGG是常见的CNN架构。
2.物体检测:检测图像中的特定物体。YOLO(You Only Look Once)和Faster R-CNN是常见的物体检测模型。

1.输入层:接受输入图像,通常为三维数据(宽度、高度、通道)

2.卷积层:通过卷积核(滤波器)对输入图像进行局部扫描,提取特征。 ①卷积核:一个小矩阵,滑动窗口,生成特征图。

② 激活函数:通常使用ReLU。

3.池化层:通过下采样(如最大池化、平均池化)减少特征图尺寸,降低计算复杂度。
4.全连接层:将卷积层和池化层提取的特征展平,并通过全连接层进行分类或回归。
5.输出层:输出最终分类结果或回归值。

RNN

循环

神经网络

Recurrent Neural Network,是一种适用于处理序列数据(如时间序列、文本数据)的神经网络,通过循环连接使得当前时刻的输出依赖于前一时刻的状态,能够捕捉序列中的时间依赖关系。

1.语言模型:根据前面的单词预测下一个单词。LSTM(长短期记忆网络)和GRU(门控循环单元)是常见的RNN变种,用于解决标准RNN的梯度消失问题。

2.语音识别:将语音信号转换为文字序列。DeepSpeech是一个基于RNN的语音识别系统。

1.输入层:接受序列数据,每个时间步都有一个输入。

2.隐藏层:每个时间步都有一个隐藏状态,当前隐藏状态由当前输入和前一时间步的隐藏状态共同决定。
①激活函数:常用Tanh或ReLU。
②长短期记忆网络(LSTM):通过引入遗忘门、输入门和输出门解决标准RNN的梯度消失问题。
③门控循环单元(GRU):类似于LSTM,但结构更简化。
3.输出层:每个时间步都可以输出,也可以仅在序列结束时输出。

GAN

生成

对抗网络

Generative Adversarial Network, GAN由生成器和判别器两个神经网络组成。生成器尝试生成逼真的数据样本,而判别器尝试区分真实样本和生成样本。两个网络通过对抗训练不断改进,最终生成器能够生成非常逼真的数据。

1.图像生成:生成逼真的图像。DCGAN是常见的图像生成模型。

2.图像超分辨率:将低分辨率图像提升到高分辨率。SRGAN是一个用于图像超分辨率的模型。

生成器:输入层:通常是随机噪声向量。 隐藏层:一系列全连接层、卷积层或反卷积层,逐步将噪声向量转化为逼真的数据。 输出层:生成假数据(如图像)。
判别器:输入层:接受真实数据和生成器生成的数据。 隐藏层:一系列卷积层和池化层,提取数据特征。 输出层:输出二分类结果(真假)。
Transformer

Transformer是一种基于注意力机制的神经网络,最初用于自然语言处理(NLP)任务。与RNN不同,Transformer不依赖于序列顺序,通过全局的自注意力机制捕捉序列中的长距离依赖关系。由编码器和解码器组成,前者将输入序列转换为内部表示,后者将内部表示转换为输出序列。

1.机器翻译:进行高质量机器翻译。
2.文本生成:生成连贯的文本。GPT(Generative Pre-trained Transformer)和BERT(Bidirectional Encoder Representations from Transformers)是两个著名的Transformer模型。

编码器:

① 输入层:接受输入序列,通常是词嵌入表示。

②自注意力层:计算输入序列中每个元素与其他元素的注意力得分。

③注意力机制:包括查询(Q)、键(K)、值(V)三个矩阵,通过点积计算注意力得分。

④前馈神经网络:对自注意力层的输出进行非线性变换。

⑤层归一化:对每一层进行标准化处理。

解码器:

① 输入层:接受目标序列的前一部分(训练时)或生成的前一部分(推理时)。

②自注意力层:与编码器相似,但只关注目标序列的前一部分。 ③编码器-解码器注意力层:通过注意力机制将编码器的输出与解码器的当前状态结合。

④前馈神经网络:对注意力层的输出进行非线性变换。

⑤层归一化:对每一层进行标准化处理。

输出层:生成最终的输出序列(如翻译结果或生成文本)。

5.例子(Matlab代码实现

基于ANN实现多变量预测的原理和步骤,并结合Matlab代码进行实例演示:

1

二、人工神经网络(ANN)回归预测实验

1.实验一:python简单预测

利用Python的sklearn库构建神经网络预测模型,特别是使用MLPRegressor进行数据预测,参考来源:人工神经网络(ANN)——python代码及示例_ann人工神经网络预测代码-CSDN博客

from sklearn.neural_network import MLPRegressor
import numpy as np
import pylab as plta = np.loadtxt('神经网络预测案例.txt')
x0 = a[:,:5]; y0 = a[:,5]  #提出训练样本数据
m1 = x0.max(axis=0); m2 = x0.min(axis=0)  #计算逐列最大值和最小值
bx0 = 2*(x0-m2)/(m1-m2)-1  #数据标准化
#构造并拟合模型
md = MLPRegressor(solver='lbfgs',activation='identity',hidden_layer_sizes=10).fit(bx0, y0)
x = np.array([[399759.5,472115],[296916,317987],[201722.1,236402],[156998.4,183918.6],[278121.85,311485.13]]).T #预测年份的非预测数据
bx = 2*(x-m2) / (m1-m2)-1  #数据标准化
yh = md.predict(bx); print('预测值为:,',np.round(yh,6))
yh0 = md.predict(bx0); delta = abs(yh0-y0)/y0*100
print('已知数据预测的相对误差:', np.round(delta,6))
t = np.arange(1990, 2012)
plt.rc('font', size=15); plt.rc('font', family='SimHei')
plt.plot(t, y0, '--o', label='原始数据')
plt.plot(t, yh0, '-*', label='预测数据')
plt.xticks(t, rotation=55); plt.legend(); plt.show()

2.实验二:


http://www.mrgr.cn/news/92157.html

相关文章:

  • 前端防重复请求终极方案:从Loading地狱到精准拦截的架构升级
  • UE 跟着官方文档学习 容器TArray 系列三
  • C#中级教程(2)——走进 C# 面向对象编程:从基础到进阶的深度探索
  • 数据结构之二叉树的定义及实现
  • std::thread的同步机制
  • 讯飞离线唤醒+离线Vosk识别+DeepSeek大模型+讯飞离线合成持续优化,无限可能~
  • 【2025深度学习环境搭建-1】在Win11上用WSL2和Docker解锁GPU加速
  • C++初阶——简单实现list
  • C语言——深入理解指针(3)
  • sql的索引与性能优化相关
  • 第4章 4.1 Entity Framework Core概述
  • podman加速器配置,harbor镜像仓库部署
  • 设计模式学习笔记
  • 【论文解读】《Training Large Language Models to Reason in a Continuous Latent Space》
  • C/C++后端开发面经
  • Java八股文(下)
  • docker容器网络配置及常用操作
  • 骁勇善战的量化利器:多因子模型【量化理论】
  • Redission可重试、超时续约的实现原理(源码分析)
  • 安全见闻5