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

神经网络算法各种层的原理(基于Keras)--输入层,全连接层,卷积层,池化层,嵌入层,长短期记忆网络层等

神经网络中的不同层提供了构建各种深度学习模型所需的基础构件,承担着数据转换和特征提取的核心功能。我们可以根据具体任务的需求选择合适的层来构建模型。

1.输入层(Input Layer)

输入层(Input Layer)是神经网络的第一个层,它接收原始数据作为输入,并将其传递给后续的隐藏层或输出层进行处理。输入层不进行任何运算,其唯一任务是接收外部数据并按指定的格式传递到网络中。根据不同的应用场景,数据的格式也有所不用:
图像处理:输入层接收图像的像素矩阵或张量,通常为三维数据(宽度、高度、通道数)。
文本处理:输入层接收文本数据的向量化表示,例如词嵌入或词袋模型(Bag of Words)。
时间序列数据:输入层接收时间序列数据的特征,可以是不同时间步长的数值数据或信号数据。
表格数据:输入层接收结构化数据的每个特征值,如数值型或类别型特征。

输入层的节点数通常与数据的特征维度相同,每个节点对应一个输入特征。

在Keras中导入Input层:

from keras.layers import Input
# 定义输入层:shape=(10,) 表示每个输入样本是长度为10的向量
input1 = Input(shape=(10,))

这段代码就明确指定输入数据的维度为(None, 10),其中None表示可变批次大小(batch_size),10表示每个样本的特征长度。例如:输入数据形状需为(batch_size, 10)的二维数组,若输入不符合此形状,模型构建时会直接报错

2.嵌入层(Embedding Layer)

嵌入层(Embedding Layer)的原理是将离散数据映射为连续变量,捕捉潜在关系。在机器学习中,Embedding 主要是指将离散的高维数据(如文字、图片、音频)映射到低纬度的连续向量空间。这个过程会生成由实数构成的向量,用于捕捉原始数据的潜在搞关系和结构。

2.1使用嵌入层的必要性

需求 传统方法 嵌入层方案 优势
处理离散数据 One-hot编码 低维稠密向量 解决维度灾难
捕捉语义关系 手动特征工程 自动学习向量空间关系 支持迁移学习
计算效率 高维稀疏矩阵运算 低维稠密矩阵运算 加速训练
罕见词处理 无法有效表示 通过上下文学习合理表示 提升泛化能力

与One-hot编码的对比实验‌
实验表明,在相同任务下,嵌入层可使模型参数量减少90%以上,同时提升准确率‌。例如:

  • One-hot编码‌:词汇表1000词 → 1000维向量
  • 嵌入层‌:词汇表1000词 → 64维向量

One-hot编码原理:
‌One-Hot编码‌(独热编码)是一种将分类变量转换为二进制向量的技术,核心是通过N位二进制向量对N个类别进行独立编码。通过为每个类别分配唯一的二进制位(仅一位为1,其余为0)实现无序特征的数值化表示。

假设我们有一群学生,他们可以通过四个特征来形容,分别是:

  • 性别:[“男”,“女”]
  • 年级:[“初一”,“初二”,“初三”]
  • 学校:[“一中”,“二中”,“三中”,“四中”]
    这时候就可以用独热编码的形式来表示了,我们用采用N位状态寄存器来对N个状态进行编码,拿上面的例子来说,就是:
    在这里插入图片描述
    举个例子,用上述四个特征来描述小明同学,即“男生,初一,来自二中”,就可以采用 [1 0 1 0 0 0 1 0 0]

2.2典型应用场景

自然语言处理(NLP):词嵌入(Word2Vec、GloVe)‌,句子/文档嵌入(BERT、Sentence-BERT)
‌推荐系统‌:将用户ID、物品ID映射为向量,计算相似度‌
‌图神经网络(GNN)‌:节点嵌入(Node2Vec)用于社交网络分析‌

2.3代码示例

from keras.models import Sequential  #  导入的是 Sequential 顺序模型,Sequential 模型是一个线性堆叠的神经网络模型,就像搭积木一样,你可以一层一层地按顺序添加神经网络层。
from keras.layers import Embedding # 导入嵌入层
# 构建模型
model = Sequential()
# 嵌入层:1000个词,每个词用8维向量表示,输入长度为10
model.add(Embedding(input_dim=1000,    # 词汇表大小output_dim=8,      # 每个词的向量维度input_length=10    # 输入序列长度
))

嵌入层输入的是input_dim,即词汇表大小(有多少个不同的词或字),output_dim: 每个词向量的维度(压缩后的维度),input_length: 每个输入序列的长度(一句话有多少个词)。这个例子中是将1000个不同的词(每个词用索引表示)映射成8维的稠密向量。

(1)input_dim:
input_dim是根据数据中所有唯一词(或字)的总数来决定的。可以通过Tokenizer文本分词和编码得到。
具体可参考:https://blog.csdn.net/Cupid_kl/article/details/151050561?spm=1011.2415.3001.5331

(2)output_dim(词向量维度)是一个超参数,需要根据经验和实验来确定:

  • 小词汇表(<1000):4-16维,一般output_dim = 8
  • 中等词汇表(1000-10000):16-128维,一般output_dim = 64
  • 大词汇表(>10000):128-512维,一般output_dim = 256

(3)input_length 由数据预处理决定,具体来说是pad_sequences 的 maxlen 参数

from keras.preprocessing.sequence import pad_sequences# 原始序列可能长度不同
sequences = [[2, 3, 4, 1], [1, 5, 6], [2, 7, 8, 9], [9, 10, 1, 11, 12, 13]]# 决定 input_length 的关键步骤!
max_length = 6  # 你选择的固定长度
padded_sequences = pad_sequences(sequences, maxlen=max_length, padding='post')print("填充后序列形状:", padded_sequences.shape)  # (4, 6)
# 这里的 6 就是 input_length

input_length的数值是统计所有序列长度后取一个合适的百分位数(如95%)。

3.卷积层(Convolutional Layer)

卷积层是一种专门用于处理具有网格状拓扑结构数据(如图像、音频、时间序列)的神经网络层。它的核心思想是通过一个叫做“卷积核”(或“滤波器”)的小窗口,在输入数据上滑动,局部地提取特征。

3.1原理

(1)核心组件:卷积核(Kernel / Filter)
一个小的、可学习的权重矩阵(例如 3x3, 5x5)。就像一个探照灯或模板,用于检测输入数据中的特定局部模式,如边缘、角点、颜色块、纹理等。
(2)工作过程:卷积操作
卷积操作可以类比为“刷油漆”或“加权平均”。

  • 放置(Place):将卷积核覆盖在输入数据的左上角起始位置。
  • 计算(Compute):将卷积核覆盖区域的元素与卷积核对应的权重元素逐点相乘后求和,最后再加上一个偏置(Bias) 项。这个计算结果就是输出特征图(Feature Map)在该位置的值。
    输出值 = (输入区域₁ * 权重₁) + (输入区域₂ * 权重₂) + … + 偏置
  • 滑动(Slide):根据设定的步长(Stride),将卷积核向右移动一定距离,重复步骤2。当滑完一行后,向下移动,继续扫描。
  • 填充(Padding - 可选):为了解决卷积导致输出尺寸变小的问题,有时会在输入数据的周围填充一圈0(或其他值),这被称为“Same Padding”;不填充则称为“Valid Padding”。
    (3) 输出:特征图(Feature Map)
    卷积核在整个输入上滑动计算后,会生成一个二维的激活图,这就是特征图。特征图上每个点的值越高,表示该区域与卷积核所探测的模式匹配度越高。

多卷积核:一个卷积层通常使用多个卷积核(例如32个、64个)。每个卷积核独立学习检测一种特定的模式,因此一层卷积会输出多个特征图


文章转载自:

http://FUhiIHvs.qcygd.cn
http://dV2uaKK2.qcygd.cn
http://RvL7piBT.qcygd.cn
http://rM8XpRY5.qcygd.cn
http://kEUEC3k4.qcygd.cn
http://SXuZpq6A.qcygd.cn
http://myXyzzIx.qcygd.cn
http://qFnMkqp4.qcygd.cn
http://ymEMyKTd.qcygd.cn
http://V1UNbgT6.qcygd.cn
http://dyRJlsIf.qcygd.cn
http://F9bOPWxR.qcygd.cn
http://OuIyiEFm.qcygd.cn
http://LZaI4dxG.qcygd.cn
http://zEZI4dtA.qcygd.cn
http://F7JEWL9u.qcygd.cn
http://xbbeP4Ks.qcygd.cn
http://QNWsn7mo.qcygd.cn
http://1jmeENYL.qcygd.cn
http://2QRAQOSz.qcygd.cn
http://m8NYuqaD.qcygd.cn
http://3lAZ2w9n.qcygd.cn
http://Z3U8pXzM.qcygd.cn
http://FOqISlm0.qcygd.cn
http://sbxpVsgf.qcygd.cn
http://fgLjHULx.qcygd.cn
http://9JW1SlxX.qcygd.cn
http://Q5be7p3Y.qcygd.cn
http://m3ocic33.qcygd.cn
http://P5xVaqtT.qcygd.cn
http://www.dtcms.com/a/367856.html

相关文章:

  • Github | MoneyPrinterTurbo:自动化视频内容生成系统
  • JUnit入门:Java单元测试全解析
  • 如何下载B站视频,去水印,翻译字幕
  • 脚本语言的大浪淘沙或百花争艳
  • Redis中的hash数据类型
  • 如何安全地删除与重建 Elasticsearch 的 .watches 索引
  • HDFS存储农业大数据的秘密是什么?高级大豆数据分析与可视化系统架构设计思路
  • uni-app iOS 文件调试常见问题与解决方案:结合 itools、克魔、iMazing 的实战经验
  • 解析豆科系统发育冲突原因
  • 五分钟XML速成
  • 《LangChain从入门到精通》系统学习教材大纲
  • 华为云 OBS:数字时代的数据存储与价值挖掘利器
  • Claude Code PM 深度实战指南:AI驱动的GitHub项目管理与并行协作
  • paimon实战 -- 阿里基于StarRocks 与 Paimon 实现的实时分析黑科技
  • 开源定时器教程:Quartz与XXL-JOB全面对比与实践
  • Day21_【机器学习—决策树(3)—剪枝】
  • finalize() 方法介绍
  • IDE mac M芯片安装报错:如何解决“InsCode.app 已损坏”,无法打开
  • Qt信号与槽机制全面解析
  • Qt实现背景滚动
  • 新后端漏洞(上)- H2 Database Console 未授权访问
  • 使用CI/CD部署后端项目(gin)
  • Charles抓包工具在接口性能优化与压力测试中的实用方法
  • Spring Boot启动失败从循环依赖到懒加载配置的深度排查指南
  • iOS混淆工具实战 在线教育直播类 App 的课程与互动安全防护
  • uni-app 项目 iOS 上架效率优化 从工具选择到流程改进的实战经验
  • solidity的高阶语法
  • 大数据框架对比与选择指南
  • 啥是两化融合?
  • 意识迷雾与算法闪电:论AI与人类信息战的终极博弈