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

第2天:认识LSTM

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

目标

具体实现

(一)环境

语言环境:Python 3.10
编 译 器: PyCharm
框 架: pytorch

(二)具体步骤
1. 什么是LSTM

LSTM(Long Short-Term Memory,长短期记忆网络)是一种特殊的循环神经网络(RNN),专门设计来解决传统RNN在处理长序列时遇到的梯度消失问题。

📖 LSTM的发展背景

传统RNN在处理长序列时面临两个主要问题:

  • 梯度消失:随着序列长度增加,早期信息的梯度会急剧衰减
  • 梯度爆炸:梯度可能变得过大,导致训练不稳定
    LSTM通过引入"门控机制"和"细胞状态"来解决这些问题。

🔧 LSTM的核心组件

LSTM单元包含三个门和一个细胞状态:

1. 遗忘门(Forget Gate)

f_t = σ(W_f · [h_{t-1}, x_t] + b_f)
  • 作用:决定从细胞状态中丢弃什么信息
  • 输出:0到1之间的值,0表示完全遗忘,1表示完全保留

2. 输入门(Input Gate)

i_t = σ(W_i · [h_{t-1}, x_t] + b_i)
C̃_t = tanh(W_C · [h_{t-1}, x_t] + b_C)
  • 作用:决定什么新信息被存储在细胞状态中
  • 两部分:决定更新什么值 + 创建候选值

3. 输出门(Output Gate)

o_t = σ(W_o · [h_{t-1}, x_t] + b_o)
h_t = o_t * tanh(C_t)
  • 作用:决定输出什么部分的细胞状态

4. 细胞状态(Cell State)

C_t = f_t * C_{t-1} + i_t * C̃_t
  • 作用:LSTM的"记忆",信息可以在其中流动

🎯 LSTM的工作流程

让我用一个形象的比喻来解释:
想象LSTM是一个智能的信息管理系统

  1. 遗忘门像一个"删除键",决定删除哪些过时信息
  2. 输入门像一个"筛选器",决定接收哪些新信息
  3. 细胞状态像一个"主内存",存储重要信息
  4. 输出门像一个"发布器",决定输出什么信息

📊 LSTM vs 传统RNN对比

特征传统RNNLSTM
记忆能力短期记忆长短期记忆
梯度问题梯度消失严重有效缓解
参数数量较少较多(约4倍)
训练复杂度简单复杂
长序列处理困难擅长
2. 网络结构
import torch  
import torch.nn as nn  class SimpleLSTM(nn.Module):  def __init__(self, input_size, hidden_size, num_layers, output_size):  """  类初始化  :param input_size: 每个时间步的输入特征维度  :param hidden_size:  LSTM隐藏状态的维度,也决定了LSTM内部门控单元的大小  :param num_layers: LSTM的层数  :param output_size: 最终输出的维度  """        super(SimpleLSTM, self).__init__()  # 定义LSTM层  # 其中batch_first=True:指定输入张量的格式为(batch_size, seq_len, input_size)  # 如果不设置,默认格式是(seq_len, batch_size, input_size)  self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)  # 定义一个线性层,将LSTM输出映射到期望的输出维度  self.fc = nn.Linear(hidden_size, output_size)  def forward(self, x):  # LSTMn层的前向传播,默认返回output和(hidden, cell_state)  # lstm_out:shape(batch_size, seq_len, hidden_size)        # hn:最终的隐藏状态,形状为(num_layers, batch_size, hidden_size)  # cn:最终的记忆状态,形状为(num_layers, batch_size, hidden_size)与hn相同  lstm_out, (hn, cn) = self.lstm(x)  # 取最后一个时间步输出  lstm_out = lstm_out[:, -1, :]  # 通过全连接层将LSTM输出映射到输出维度  output = self.fc(lstm_out)  return output  # 参数设置  
input_size = 10 # 输入特征的维度  
hidden_size = 20 # LSTM隐藏层的维度  
num_layers = 2 # LSTM的层数  
output_size = 1 #  输出的维度  # 创建模型实例  
model = SimpleLSTM(input_size, hidden_size, num_layers, output_size)  # 打印模型结构  
print(model)  # 示例输入(batch_size, seq_len, input_size)  
x = torch.randn(5, 15, input_size)  # 本例相当于(5, 15, 10)  # 前向传播  
output = model(x)  
# 计算过程如下:  
# 1. 输入:(5, 15, 10)  
# 2. LSTM处理:(5, 15, 10) -> (5, 15, 20)  
# 3. 取最后的时间步: (5, 15, 20) -> (5, 20)  
# 4. 全连接层:(5, 20) -> (5, 1)  # 输出结果  
print("输入shape为:", x.shape)  
print("输出shape为:", output.shape)

image.png

(三)总结
LSTM的典型应用
1. 自然语言处理
  • 机器翻译
  • 情感分析
  • 文本生成
2. 时间序列预测
  • 股票价格预测
  • 天气预报
  • 销售预测
3. 语音识别
  • 语音到文本转换
  • 语音合成
4. 其他序列任务
  • 视频分析
  • 生物序列分析
  • 异常检测

相关文章:

第2天:认识LSTM

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目标 具体实现 (一)环境 语言环境:Python 3.10 编 译 器: PyCharm 框 架: pytorch (二)具体步骤…...

自动化提示生成框架(AutoPrompt)

自动化提示生成框架(AutoPrompt) 一、核心创新点 自动化提示生成框架(AutoPrompt) 创新本质:提出基于梯度引导搜索的自动化提示生成方法,替代人工设计模板的传统模式。技术路径: 将提示视为可训练的离散token序列,通过优化提示向量(prompt embedding)搜索语义空间。利…...

两轮自平衡机器人建模、LQR控制与仿真分析

以下是一个针对两轮自平衡机器人(平衡车) 的完整建模、控制设计与仿真分析报告,包含详细的理论推导、控制算法实现及Python仿真代码。 两轮自平衡机器人建模、LQR控制与仿真分析 1. 引言 两轮自平衡机器人是一种典型的欠驱动、非线性、不稳定系统,其动力学特性与倒立摆高度…...

在NLP文本处理中,将字符映射到阿拉伯数字(构建词汇表vocab)的核心目的和意义

一、词汇表的核心作用 ‌数值化表示‌ 将离散的文本字符转换为连续的数值索引,使计算机能够处理非结构化的语言数据57。例如: "中国" → 2"a" → 5 ‌统一输入格式‌ 不同长度的文本通过填充/截断转换为固定长度的数字序列&#xf…...

中国首套1公里高分辨率大气湿度指数数据集(2003~2020)

时间分辨率:月空间分辨率:100m - 1km共享方式:开放获取数据大小:34.79 GB数据时间范围:2003-01-01 — 2020-12-31元数据更新时间:2023-07-26 数据集摘要 中国首套1公里高分辨率大气湿度指数数据集&#xf…...

计算机视觉顶刊《International Journal of Computer Vision》2025年5月前沿热点可视化分析

追踪计算机视觉领域的前沿热点是把握技术发展方向、推动创新落地的关键,分析这些热点,不仅能洞察技术趋势,更能为科研选题和工程实践提供重要参考。本文对计算机视觉顶刊《International Journal of Computer Vision》2025年5月前沿热点进行了…...

python学习打卡day45

DAY 45 Tensorboard使用介绍 知识点回顾: tensorboard的发展历史和原理tensorboard的常见操作tensorboard在cifar上的实战:MLP和CNN模型 效果展示如下,很适合拿去组会汇报撑页数: 作业:对resnet18在cifar10上采用微调策…...

JAVA元编程

一、引言:元编程的本质与 Java 实现 元编程(Metaprogramming)是一种 “操纵程序的程序” 的编程范式,其核心思想是通过代码动态操作代码本身。在 Java 中,元编程主要通过 ** 反射(Reflection)、…...

Verilog编程技巧01——如何编写三段式状态机

前言 Verilog编程技巧系列文章将聚焦于介绍Verilog的各种编程范式或者说技巧,编程技巧和编程规范有部分重合,但并非完全一样。规范更注重编码的格式,像变量命名、缩进、注释风格等,而编程技巧则更偏重更直观易读、更便于维护、综合…...

智启未来:当知识库遇见莫奈的调色盘——API工作流重构企业服务美学

目录 引言 一、初识蓝耘元生代MaaS平台 1.1 平台架构 1.2 平台的优势 1.3 应用场景 二、手把手教你如何在蓝耘进行注册 (1)输入手机号,将验证码正确填入即可快速完成注册 (2)进入下面的页面表示已经成功注册&…...

java教程笔记(十一)-泛型

Java 泛型(Generics)是 Java 5 引入的重要特性之一,它允许在定义类、接口和方法时使用类型参数。泛型的核心思想是将类型由具体的数据类型推迟到使用时再确定,从而提升代码的复用性和类型安全性。 1.泛型的基本概念 1. 什么是泛…...

JUnit​​ 和 ​​Mockito​​ 的详细说明及示例,涵盖核心概念、常用注解、测试场景和实战案例。

一、JUnit 详解 1. JUnit 核心概念 ​​测试类​​:以 Test 结尾的类(或通过 Test 注解标记的方法)。​​断言(Assertions)​​:验证预期结果与实际结果是否一致(如 assertEquals()&#xff0…...

【Go语言基础【7】】条件语句

文章目录 零、概述一、if 条件语句1. 单条件模型2. 多条件模型(else if)3. 条件嵌套与优化 二、switch 条件判断1. 基本用法2. fallthrough 穿透执行3. break 终止执行 零、概述 语句类型适用场景核心特点if-else单条件或简单多条件判断逻辑清晰&#x…...

【Python 算法零基础 4.排序 ⑪ 十大排序算法总结】

目录 一、选择排序回顾 二、冒泡排序回顾 三、插入排序回顾 四、计数排序回顾 五、归并排序回顾 六、快速排序回顾 七、桶排序回顾 八、基数排序 九、堆排序 十、希尔排序 十一、十大排序算法对比 十二、各算法详解与应用场景 1. 选择排序(Selection Sort&#xff…...

解决神经网络输出尺寸过小的实战方案

训练CIFAR10分类模型时出现报错:RuntimeError: Given input size: (256x1x1). Calculated output size: (256x0x0). Output size is too small。该问题由网络结构设计缺陷导致图像尺寸过度缩小引发。 核心原因分析 网络结构缺陷 原始模型采用六层卷积层&#xff0c…...

Python备忘

1. 自定义多线程程序: import concurrent.futures import threadingclass CustomThreadPool:def __init__(self, max_workers):self.max_workers max_workersself.pool concurrent.futures.ThreadPoolExecutor(max_workers)self.running_num 0self.semaphore t…...

如何在 Windows 11 中永久更改默认浏览器:阻止 Edge 占据主导地位

在 Windows 11 中更改默认浏览器对于新手或技术不太熟练的用户来说可能会令人沮丧。 为什么要在 Windows 11 中更改默认浏览器? 这是一个重要的问题:你为什么要从 Microsoft Edge 切换过来? 生态系统集成:如果你已经在广泛使用 Google 服务,Chrome 可以提供无缝集成。同…...

量子比特实现方式

经典计算机是通过电子电路运转起来的。使用硅制半导体制成的名为晶体管的小元件发挥了开关的作用,将其与金属布线组合起来即可实现逻辑门,再将逻辑门集成起来就能制造出经典计算机。量子计算机的制造过程则要复杂许多,因为量子计算机既需要量…...

智慧水务发展迅猛:从物联网架构到AIoT系统的跨越式升级

AI大模型引领智慧水务迈入新纪元 2025年5月25日,水利部自主研发的“水利标准AI大模型”正式发布,它标志着水务行业智能化进程的重大突破。该模型集成1800余项水利标准、500余项法规及海量科研数据,支持立项、编制、审查等全流程智能管理&…...

1、cpp实现Python的print函数

实现一 #include <iostream> #include <list> #include <string>using namespace std;// 定义一个空的print函数&#xff0c;作为递归终止条件 void print(){// };// 可变参数模板函数&#xff0c;用于递归输出传入的参数 template <typename T, typenam…...

【Linux基础知识系列】第十四篇-系统监控与性能优化

一、简介 随着信息技术的飞速发展&#xff0c;Linux系统在服务器领域占据着重要地位。无论是web服务器、数据库服务器还是文件服务器&#xff0c;都需要高效的运行以满足业务需求。系统监控与性能优化是确保Linux系统稳定、高效运行的关键任务。通过实时监测系统资源的使用情况…...

云原生思维重塑数字化基座:从理念到实践的深度剖析

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;云原生为何成为数字化的“基础设施语言”&#xff1f; 随着5G、人工智能、物联网等技术逐步进入规模化落地阶段&am…...

Animate On Scroll 用于在用户滚动页面时实现元素的动画效果

AOS (Animate On Scroll) 详细介绍 什么是AOS&#xff1f; AOS&#xff08;Animate On Scroll&#xff09;是一个轻量级的JavaScript库&#xff0c;用于在用户滚动页面时实现元素的动画效果。它允许网页元素在进入或离开视口&#xff08;viewport&#xff09;时触发各种CSS动…...

Java高级 | 【实验五】Spring boot+mybatis操作数据库

隶书文章&#xff1a;Java高级 | &#xff08;二十二&#xff09;Java常用类库-CSDN博客 系列文章&#xff1a;Java高级 | 【实验一】Springboot安装及测试 |最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot 静…...

[蓝桥杯]搭积木

搭积木 题目描述 小明对搭积木非常感兴趣。他的积木都是同样大小的正立方体。 在搭积木时&#xff0c;小明选取 mm 块积木作为地基&#xff0c;将他们在桌子上一字排开&#xff0c;中间不留空隙&#xff0c;并称其为第 0 层。 随后&#xff0c;小明可以在上面摆放第 1 层&a…...

在MATLAB中使用自定义的ROS2消息

简明结论&#xff1a; 无论ROS2节点和MATLAB运行在哪&#xff0c;MATLAB本机都必须拥有自定义消息源码并本地用ros2genmsg生成&#xff0c;才能在Simulink里订阅这些消息。只要你想让MATLAB或Simulink能识别自定义消息&#xff0c;必须把消息包源码(.msg等)拷到本机指定目录&a…...

使用C/C++和OpenCV实现图像拼接

使用 C 和 OpenCV 实现图像拼接 本文将详细介绍如何利用 OpenCV 库&#xff0c;在 C 环境中实现图像拼接。图像拼接技术可以将多张具有重叠区域的图像合成为一张高分辨率的全景图。OpenCV 提供了一个功能强大的 Stitcher 类&#xff0c;它封装了从特征点检测、匹配到图像融合的…...

神经网络-Day46

目录 一、 什么是注意力二、 特征图的提取2.1 简单CNN的训练2.2 特征图可视化 三、通道注意力3.1 通道注意力的定义3.2 模型的重新定义&#xff08;通道注意力的插入&#xff09; 一、 什么是注意力 注意力机制&#xff0c;本质从onehot-elmo-selfattention-encoder-bert这就是…...

Ubuntu中常用的网络命令指南

Ubuntu中常用的网络命令指南 在Ubuntu系统中&#xff0c;网络管理是日常运维和故障排查的核心技能。 &#x1f6e0;️ 基础网络诊断 ping - 测试网络连通性 ping google.com # 持续测试 ping -c 4 google.com # 发送4个包后停止traceroute / tracepath - 追踪数据包路径 …...

JVM——如何打造一个类加载器?

引入 在Java应用程序的生命周期中&#xff0c;类加载器扮演着至关重要的角色。它是Java运行时环境的核心组件之一&#xff0c;负责在需要时动态加载类文件到JVM中。理解类加载器的工作原理以及如何自定义类加载器&#xff0c;不仅可以帮助我们更好地管理应用程序的类加载过程&…...