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

【机器学习笔记 Ⅱ】2 神经网络中的层

神经网络中的层(Layer)详解

神经网络中的“层”是模型的基本构建模块,每一层由多个**神经元(或节点)**组成,负责对输入数据进行特定类型的变换(如特征提取、非线性激活)。通过堆叠不同的层,神经网络可以学习从简单到复杂的多层次特征表示。


1. 层的核心作用

  • 特征转换:每一层将输入数据映射到新的表示空间。
  • 分工协作
    • 浅层:捕捉低级特征(如边缘、纹理)。
    • 深层:组合低级特征为高级语义(如物体、语义概念)。

2. 常见的层类型

(1) 输入层(Input Layer)

  • 功能:接收原始数据(不进行任何计算)。
  • 示例
    • 图像任务:输入层维度为 (宽度, 高度, 通道数)(如 (224, 224, 3))。
    • 文本任务:输入层维度为 (序列长度, 词向量维度)

(2) 全连接层(Dense Layer / Fully Connected Layer)

  • 结构:每个神经元与前一层的所有神经元连接。

  • 数学表达

  • 用途:分类器、特征组合。

代码示例(Keras)

from tensorflow.keras.layers import Dense
dense_layer = Dense(units=128, activation='relu')  # 128个神经元,ReLU激活

(3) 卷积层(Convolutional Layer, Conv)

  • 功能:通过卷积核(滤波器)提取局部特征(如边缘、纹理)。
  • 核心参数
    • filters:卷积核数量(控制输出通道数)。
    • kernel_size:卷积核大小(如 3×3)。
    • strides:滑动步长。
  • 优势:参数共享(减少参数量)、平移不变性。

代码示例

from tensorflow.keras.layers import Conv2D
conv_layer = Conv2D(filters=32, kernel_size=(3, 3), activation='relu')

(4) 池化层(Pooling Layer)

  • 功能:降维(减少计算量)、增强平移不变性。
  • 类型
    • 最大池化(MaxPooling):取窗口内最大值。
    • 平均池化(AveragePooling):取窗口内平均值。
  • 参数pool_size(如 2×2),strides

代码示例

from tensorflow.keras.layers import MaxPooling2D
pool_layer = MaxPooling2D(pool_size=(2, 2))

(5) 循环层(Recurrent Layer, RNN/LSTM/GRU)

  • 功能:处理序列数据(时间步间有依赖关系)。
  • 结构:神经元间存在循环连接,保留历史信息。
  • 变体
    • LSTM:长短期记忆,解决梯度消失问题。
    • GRU:简化版LSTM,计算效率更高。

代码示例

from tensorflow.keras.layers import LSTM
lstm_layer = LSTM(units=64, return_sequences=True)  # 64个神经元,返回完整序列

(6) 嵌入层(Embedding Layer)

  • 功能:将离散型数据(如单词、类别ID)映射为稠密向量。
  • 用途:自然语言处理(NLP)、推荐系统。

代码示例

from tensorflow.keras.layers import Embedding
embedding_layer = Embedding(input_dim=10000, output_dim=128)  # 10000个词→128维向量

(7) 归一化层(Normalization Layer)

  • 功能:标准化层输入,加速训练。
  • 类型
    • BatchNorm:对小批量数据归一化(图像任务常用)。
    • LayerNorm:对单个样本归一化(NLP任务常用)。

代码示例

from tensorflow.keras.layers import BatchNormalization
norm_layer = BatchNormalization()

(8) Dropout层

  • 功能:随机丢弃部分神经元(防止过拟合)。
  • 参数rate(丢弃比例,如 0.5)。

代码示例

from tensorflow.keras.layers import Dropout
dropout_layer = Dropout(rate=0.5)

(9) 输出层(Output Layer)

  • 设计依据:根据任务类型选择:
    • 二分类:1个神经元 + Sigmoid激活。
    • 多分类:N个神经元 + Softmax激活。
    • 回归:1个神经元 + 线性激活(无激活函数)。

代码示例

# 多分类输出层
output_layer = Dense(units=10, activation='softmax')  # 10个类别

3. 层的堆叠与模型构建

(1) 典型网络结构示例

  • 图像分类(CNN)
    输入层 → [Conv → ReLU → Pooling]×N → Flatten → Dense → 输出层
  • 文本分类(RNN)
    输入层 → Embedding → LSTM → Dense → 输出层

(2) 代码示例(Keras Sequential模型)

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import *model = Sequential([Input(shape=(224, 224, 3)),                      # 输入层Conv2D(64, (3, 3), activation='relu'),          # 卷积层MaxPooling2D((2, 2)),                           # 池化层Flatten(),                                      # 展平层Dense(128, activation='relu'),                  # 全连接层Dropout(0.5),                                   # Dropout层Dense(10, activation='softmax')                 # 输出层
])
model.summary()  # 打印模型结构

4. 层的超参数选择

参数常见设置影响
神经元数/滤波器数全连接层:644096;卷积层:16512模型容量、计算成本
卷积核大小通常为 3×35×5感受野大小
激活函数ReLU(隐藏层)、Softmax(多分类输出)非线性能力、梯度传播
Dropout率0.2~0.5正则化强度

5. 总结

  • 层是神经网络的基础组件,不同层负责不同功能(特征提取、降维、序列建模等)。
  • 设计原则
    1. 输入层维度需匹配数据形状。
    2. 隐藏层数量和宽度影响模型表达能力。
    3. 输出层设计需匹配任务类型。
  • 核心技巧
    • 卷积层用于空间数据(图像),循环层用于序列数据(文本)。
    • 使用BatchNorm和Dropout提升训练稳定性。

通过灵活组合不同类型的层,可以构建适应各种任务的强大模型!

http://www.xdnf.cn/news/14972.html

相关文章:

  • ch03 部分题目思路
  • 深入探索 pnpm:高效磁盘利用与灵活的包管理解决方案
  • 深度学习篇---简单果实分类网络
  • 软件工程中耦合度
  • 如何正确规范的开发术语自己的TYPECHO插件
  • 条件渲染 v-show与v-if
  • Web开发安全 之 信息加密
  • Spring Boot 集成 Thymeleaf​​ 的快速实现示例,无法渲染页面问题解决
  • 基于Flask和机器学习开发的米其林餐厅数据可视化平台
  • Peek-Ubuntu上Gif录制工具-24.04LTS可装
  • ClickHouse 全生命周期性能优化
  • Java零基础笔记01(JKD及开发工具IDEA安装配置)
  • 数据库学习笔记(十七)--触发器的使用
  • Chat Model API
  • centos 7.6安装mysql8
  • MySQL GROUP_CONCAT函数实现列转行
  • Python实例题:基于 Python 的简单聊天机器人
  • 基于Java+SpringBoot的三国之家网站
  • HTML网页应用打包Android App 完整实践指南
  • IM即时通讯系统设计——TIO 作为技术框架
  • .NET9 实现斐波那契数列(FibonacciSequence)性能测试
  • leetcode918.环形子数组的最大和
  • LangChain4j 框架模仿豆包实现智能对话系统:架构与功能详解
  • 力扣网编程55题:跳跃游戏之逆向思维
  • 【Linux】常用基本指令
  • TinyWebserver学习(9)-HTTP
  • 【Halcon】WPF 自定义Halcon显示控件完整流程与 `OnApplyTemplate` 未触发的根本原因解析!
  • C语言socket编程-补充
  • 面试150 快乐数
  • uniapp启动图被拉伸问题