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

嵌入式学习-PyTorch(6)-day23

对其他的层有了一些了解

代码实现了Linear layer

Normalization Layers 正则化层

📌 什么是 Normalization Layers?

Normalization Layers 是一种 正则化手段,用于 加速神经网络训练提高模型稳定性。它们的核心作用是——

👉 把输入特征分布“标准化”,让不同批次的数据分布更一致,训练更高效,收敛更快。

常见的归一化层包括:

名称应用场景特点
BatchNorm图像分类、CNN对每个 batch 的特征维度做归一化
LayerNormNLP、Transformer对单个样本的全部特征归一化
InstanceNorm风格迁移对每个样本、每个通道单独归一化
GroupNorm小批量训练按组归一化,解决小 batch 不稳定问题
RMSNormTransformer 改进版只标准化均方根值,不用均值
WeightNorm特殊情况对权重进行归一化,而不是特征


🎁 它们有啥用?

✅ 作用💡 解释
加速收敛减少特征分布的漂移(Internal Covariate Shift),模型训练更快
防止梯度爆炸/消失保证特征分布稳定,梯度不容易失控
提高泛化能力起到轻微正则化作用,减少过拟合风险
减少超参数敏感性对学习率、初始化不那么敏感,训练更稳定


🎨 举个经典例子:BatchNorm 原理

公式:

\hat{x} = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} 

 y = \gamma \hat{x} + \beta

  • \mu, \sigma^2:当前 batch 的均值和方差

  • \gamma, \beta:可训练的缩放和平移参数

  • \epsilon:防止除零的小值

💡 简化理解

  • 标准化 → 分布变“正常”

  • 拉伸平移 → 不限制模型能力


🎯 总结

  • 什么时候用?

    • CNN、Transformer、RNN、GAN 都有用;

    • batch size 小就选 LayerNormGroupNorm

    • 想快点收敛,首选 BatchNorm

  • 本质作用?

    • 加速训练 + 提升稳定性 + 抗过拟合

 recurrent layers 循环层

🧠 什么是 Recurrent Layers?

Recurrent Layers 是一种 循环神经网络(RNN) 的核心组件,专门用来处理有 时间关系序列特征 的数据。

普通的全连接(Linear)或者卷积(Conv)层是 一次性吃掉所有输入
循环层不一样,它是一口一口慢慢吃,有“记忆”,能把之前的信息记下来,影响后面的输出。


🔥 常见 Recurrent Layers 一览

名称简单理解特点
RNN最基础的循环层容易梯度爆炸/消失
LSTM加了“记忆门控”的RNN能长期记忆,效果更稳
GRU精简版 LSTM参数更少,速度更快
BiRNN / BiLSTM双向RNN结合前后信息
Attention(不严格属于RNN)可看做升级版现在流行,逐渐替代传统RNN


🏷️ 工作流程(以 LSTM 为例)

假设一个序列 [x1,x2,...,xT][x_1, x_2, ..., x_T][x1​,x2​,...,xT​]:

每个时间步:

Input x_t + Hidden state h_{t-1} => 计算门控 => 输出 h_t, c_t

  • h_t:隐藏状态(短期记忆)

  • c_t:单元状态(长期记忆)

  • 门控机制(输入门、遗忘门、输出门)动态决定信息“记住 or 忘记”。


🎁 Recurrent Layers 有啥用?

✅ 作用💡 说明
处理序列数据时间、文本、音频等按顺序分析
有“记忆”能力能记住前面发生的事情
捕捉长期依赖特别是 LSTM/GRU
文本生成/翻译Seq2Seq、Chatbot 等常见应用
时间序列预测股票预测、温度预测等


📌 PyTorch 示例:

import torch from torch

import nn

rnn = nn.LSTM(input_size=10, hidden_size=20, num_layers=2, batch_first=True) input = torch.randn(32, 5, 10) # batch_size=32, sequence_length=5, input_size=10 output, (h_n, c_n) = rnn(input)

print(output.shape) # (32, 5, 20)

解释:

  • batch_size=32:一次性处理32个样本

  • sequence_length=5:每个样本有5个时间步

  • input_size=10:每个时间步特征维度是10

  • hidden_size=20:隐藏层大小20

🎯 一句话总结:

Recurrent Layers 是序列大师,LSTM/GRU是实用级选手;长记忆短记忆一个不落,现在深度学习搞序列,基本离不开它们。📈

 

Transformer Layers 

🚀 什么是 Transformer Layers?

Transformer 层 = 不用循环、不用卷积,全靠 Attention 搞定序列建模的架构。

最早是 2017 年《Attention is All You Need》 提出的,直接颠覆了传统 RNN/LSTM 的处理方式,成为 BERT、GPT、ViT、ChatGPT 背后的核心组件。


🏷️ Transformer 层的经典组成

每个 Transformer Layer 其实是:

输入 Embedding →

[LayerNorm + Multi-Head Attention + Residual] →

[LayerNorm + Feed Forward Network + Residual] →

输出

分模块拆开看:

模块功能用途
Multi-Head Self-Attention看“全局信息”比 RNN 更强,能直接看到序列任意位置
Feed Forward Network (FFN)非线性映射提高表达能力
Layer Normalization稳定训练不容易梯度爆炸/消失
Residual Connection残差连接防止深层网络退化
Position Encoding位置感知因为没有循环,靠加 Positional Embedding 懂顺序

🎁 Transformer 的核心优势

✅ 优势📌 解释
并行计算不像 RNN 一步步算,Transformer 一次吞下整段序列
远程依赖捕捉Attention 能看全局关系,不怕长依赖问题
训练效率高GPU/TPU 很吃这一套,训练速度爆炸快
泛化性强NLP → CV → Audio → 多模态全能打

🎨 Transformer Layer 结构图(文字版)

输入 → 加位置编码 →

[MHA] → Add & Norm →

[FFN] → Add & Norm →

输出

  • MHA:Multi-Head Attention

  • FFN:Feed Forward Network

  • Add & Norm:残差连接 + LayerNorm


🧱 PyTorch Transformer 层示例

import torch

from torch import nn

# 单个 Transformer 层

transformer_layer = nn.TransformerEncoderLayer(

d_model=512,

nhead=8,

dim_feedforward=2048

)

x = torch.randn(10, 32, 512) # [sequence_length, batch_size, embedding_dim] output = transformer_layer(x)

print(output.shape) # torch.Size([10, 32, 512])

💡 d_model=512:输入特征维度
💡 nhead=8:多头注意力头数
💡 dim_feedforward=2048:前馈层宽度


🎯 Transformer Layer 怎么用:

场景用法
NLP文本分类、机器翻译、对话生成(BERT、GPT、ChatGPT)
CV图像分类(ViT)、目标检测(DETR)
音频语音识别、音频分类
多模态文本-图片理解(CLIP)、视频理解

🌟 总结:

Transformer Layers = Attention 驱动的超级表达模型,能理解 全局依赖关系,并且训练速度快,效果炸裂。现代深度学习主力选手。

 Linear Layer(线性层,全连接层)

🧱 什么是 Linear Layer?

简单来说:

output = X \cdot W^T + b

也叫 全连接层(Fully Connected Layer, FC Layer)

  • 把输入特征乘一个 权重矩阵 W,加上一个 偏置 b,得到输出。

它的本质:

线性变换,把一个维度的特征“映射”到另一个维度。


📌 PyTorch 实际代码:

import torch

from torch import nn

linear = nn.Linear(in_features=10, out_features=5) # 输入10维,输出5维

x = torch.randn(3, 10) # batch_size=3,特征10维 output = linear(x) print(output.shape) # [3, 5]

💡 解释:

  • 输入 shape = (3, 10)

  • 输出 shape = (3, 5)

  • linear.weight.shape = (5, 10)linear.bias.shape = (5,)


🎁 Linear Layer 有啥用?

✅ 作用💡 说明
特征投影把高维特征降维,或者低维升维
分类决策层最后一层通常是 Linear 层接 Softmax
输入特征融合融合不同特征的加权信息
Transformer FFN 核心Transformer 里 FeedForward 全靠它
万能适配层任意维度变换,随用随调

🎨 常见场景

场景使用方式
图像分类Conv → Flatten → Linear → 输出分类
TransformerMHA → Linear → 输出维度不变
强化学习状态 → Linear → 动作概率或值函数
回归任务Linear → 直接输出连续值

🔥 一句话总结

Linear Layer = 最简单、最高频率使用的“特征映射”工具,深度学习的打工人,不起眼但必不可少。

 nn.Sequential 相当于一个容器,这样更方便阅读

import torch
from torch import nn
from torch.nn import Conv2d
from torch.utils.tensorboard import SummaryWriterclass Tudui(nn.Module):def __init__(self):super().__init__()self.conv1 = nn.Conv2d(in_channels=3, out_channels=32, kernel_size=5, padding=2)self.maxpool1 = nn.MaxPool2d(kernel_size=2)self.conv2 = nn.Conv2d(in_channels=32, out_channels=32, kernel_size=5, padding=2)self.maxpool2 = nn.MaxPool2d(kernel_size=2)self.conv3 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=5, padding=2)self.maxpool3 = nn.MaxPool2d(kernel_size=2)self.flatten = nn.Flatten()self.linear1 = nn.Linear(in_features=1024, out_features=64)self.linear2 = nn.Linear(in_features=64, out_features=10)self.model1 = nn.Sequential(Conv2d(in_channels=3, out_channels=32, kernel_size=5, padding=2),nn.MaxPool2d(kernel_size=2),nn.Conv2d(in_channels=32, out_channels=32, kernel_size=5, padding=2),nn.MaxPool2d(kernel_size=2),nn.Conv2d(in_channels=32, out_channels=64, kernel_size=5, padding=2),nn.MaxPool2d(kernel_size=2),nn.Flatten(),nn.Linear(in_features=1024, out_features=64),nn.Linear(in_features=64, out_features=10))def forward(self, x):# x = self.conv1(x)# x = self.maxpool1(x)# x = self.conv2(x)# x = self.maxpool2(x)# x = self.conv3(x)# x = self.maxpool3(x)# x = self.flatten(x)# x = self.linear1(x)# x = self.linear2(x)x = self.model1(x)return xtudui = Tudui()writer = SummaryWriter("./logs_seq")
input  = torch.ones(64, 3, 32, 32)
output = tudui(input)
print(output.shape)
writer.add_graph(tudui, input)
writer.close()

http://www.dtcms.com/a/284832.html

相关文章:

  • CCLink IE转ModbusTCP网关配置无纸记录器(上篇)
  • 小程序按住说话
  • zlmediakit接入Onvif设备方案
  • The Missing Semester of Your CS Education 学习笔记以及一些拓展知识(二)
  • 嵌入式基础 -- ADC(模数转换器,Analog to Digital Converter)
  • 疯狂星期四文案网第10天运营日报
  • Kotlin自定义排序
  • AUTOSAR进阶图解==>AUTOSAR_SWS_EFXLibrary
  • Lotus-基于大模型的查询引擎 -开源学习整理
  • 打印文件/打印机队列 - 华为OD机试真题(Java 题解)
  • QT 交叉编译环境下,嵌入式设备显示字体大小和QT Creator 桌面显示不一致问题解决
  • 中国力学大会倒计时2天●千眼狼科学仪器在实验力学研究中应用
  • 状态机(State Machine)是什么?
  • 【秋招ready】
  • 网络初级安全第二次作业
  • css样式中的选择器和盒子模型
  • JoditEditor编辑与预览模式
  • 电碳表:精准计量每一度电的碳排放
  • Python--plist文件的读取
  • 使用CosyVoice-300M实现零样本语音克隆:Xinference部署与实战
  • nginx代理websocket请求
  • Android设备标识符详解:IMEI、ANDROID_ID与OAID
  • 产品经理如何绘制服务蓝图(Service Blueprint)
  • 企业级AI智能体架构落地:工程化能力设计的全景指南
  • docker重新搭建redis集群
  • ubuntu系统+N卡 | docker compose+ollama+dify
  • ACOUSLIC-AI挑战报告:基于低收入国家盲扫超声数据的胎儿腹围测量|文献速递-医学影像算法文献分享
  • 【LeetCode刷题指南】--数组串联,合并两个有序数组,删除有序数组中的重复项
  • FreeBSD Conda Python3.12下安装GPT4Free(g4f)0.5.7.3版本
  • VR全景园区:开启智慧园区新时代