RNN(LSTM)数据形式及Padding操作处理变长时序序列dynamic_rnn

PyTorch处理RNN输入变长序列padding 为什么RNN需要处理变长输入 假设我们有情感分析的例子,对每句话进行一个感情级别的分类,主体流程大概是下图所示: 思路比较简单,但是当我们进行batch个训练数据一起计算的时候,我们会遇到多个训练样例长度不同的情况,这样我们就会很自然的进行padding,将短句子padding为跟最长的句子一样。 比如向下图这样: 但是这会有一个问题,什么问题呢?比如上图,句子“Yes”只有一个单词,但是padding了5的pad符号,这样会导致LSTM对它的表示通过了非常多无用的字符,这样得到的句子表 阅读详情

Summary

  1. RNN
    • 样本一样,计算的状态值和输出结构一致,也即是说只要当前时刻的输入值也前一状态值一样,那么其当前状态值和当前输出结果一致,因为在当前这一轮训练中权重参数和偏置均未更新
    • RNN的最终状态值与最后一个时刻的输出值一致
    • 输入数据要求格式为,shape=(batch_size, step_time_size, input_size),那么,state的shape=(batch_size, state_size);output的shape=(batch_size, step_time_size, state_size),并且最后一个有效输出(有效序列长度,不包括padding的部分)与状态值会一样
  2. LSTM
    • LSTM与RNN基本一致,不同在于其状态有两个c_state和h_state,它们的shape一样,输出值output的最后一个有效输出与h_state一致
    • 用变长RNN训练,要求其输入格式仍然要求为shape=(batch_size, step_time_size, input_size),但可指定每一个批次中各个样本的有效序列长度,这样在有效长度内其状态值和输出值原理不变,但超过有效长度的部分的状态值将不会发生改变,而输出值都将是shape=(state_size,)的零向量(注:RNN也是这个原理)
    • 需要说明的是,不是因为无效序列长度部分全padding为0而引起输出全为0,状态不变,因为输出值和状态值得计算不仅依赖当前时刻的输入值,也依赖于上一时刻的状态值。其内部原理是利用一个mask matrix矩阵标记有效部分和无效部分,这样在无效部分就不用计算了,也就是说,这一部分不会造成反向传播时对参数的更新。当然,如果padding不是零,那么padding的这部分输出和状态同样与padding为零的结果是一样的
'''
#样本数据为(batch_size,time_step_size, input_size[embedding_size])的形式,其中samples=4,timesteps=3,features=3,其中第二个、第四个样本是只有一个时间步长和二个时间步长的,这里自动补零
'''
import pandas as pd
import numpy as np
import tensorflow as tf

train_X = np.array([[[0, 1, 2], [9, 8, 7], [3,6,8]], 
                    [[3, 4, 5], [0, 10, 110], [0,0,0]], 
                    [[6, 7, 8], [6, 5, 4], [1,7,4]], 
                    [[9, 0, 1], [3, 7, 4], [0,0,0]],
                    [[9, 0, 1], [3, 3, 4], [0,0,0]]
                   ])
                   
sequence_length = [3, 1, 3, 2, 2]

train_X.shape, train_X[:,2:3,:].reshape(5, 3)
tf.reset_default_graph()

x = tf.placeholder(tf.float32, shape=(None, 3, 3))  # 输入数据只需能够迭代并符合要求shape即可,list也行,shape不指定表示没有shape约束,任意shape均可
rnn_cell = tf.nn.rnn_cell.BasicRNNCell(num_units=6)  # state_size[hidden_size]
lstm_cell = tf.nn.rnn_cell.BasicLSTMCell(num_units=6)  # state_size[hidden_size]
outputs1, state1 = tf.nn.dynamic_rnn(rnn_cell, x, dtype=tf.float32, sequence_length=sequence_length)
outputs2, state2 = tf.nn.dynamic_rnn(lstm_cell, x, dtype=tf.float32, sequence_length=sequence_length)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())  # 初始化rnn_cell中参数变量
    outputs1, state1 = sess.run((outputs1, state1), feed_dict={x: train_X})
    outputs2, state2 =  sess.run([outputs2, state2], feed_dict={x: train_X})
    print(outputs1.shape, state1.shape)  # (4, 3, 5)->(batch_size, time_step_size, state_size), (4, 5)->(batch_size, state_size)
    print(outputs2.shape)  # state2为LSTMStateTuple(c_state, h_state)
    print("---------output1<rnn>state1-----------")
    print(outputs1)  # 可以看出output1的最后一个时刻的输出即为state1, 即output1[:,-1,:]与state1相等
    print(state1)
    print(np.all(outputs1[:,-1,:] == state1))
    print("---------output2<lstm>state2-----------")
    print(outputs2)  # 可以看出output2的最后一个时刻的输出即为LSTMStateTuple中的h
    print(state2)
    print(np.all(outputs2[:,-1,:] == state2[1]))

再来怼怼dynamic_rnn中数据序列长度tricks
序列tricks
思路样例代码

from collections import Counter
import numpy as np

origin_data = np.array([[1, 2, 3],
                        [3, 0, 2],
                        [1, 1, 4],
                        [2, 1, 2],
                        [0, 1, 1],
                        [2, 0, 3]
                       ])
# 按照指定列索引进行分组(看作RNN中一个样本序列),如下为按照第二列分组的结果
# [[[1, 2, 3], [0, 0, 0], [0, 0, 0]],
# [[3, 0, 2], [2, 0, 3], [0, 0, 0]],
# [[1, 1, 4], [2, 1, 2], [0, 1, 1]]]

# 第一步,将原始数据按照某列序列化使之成为一个序列数据
def groupby(a, col_index):  # 未加入索引越界判断
    max_len = max(Counter(a[:, col_index]).values())
    for i in set(a[:, col_index]):
        d[i] = []
    for sample in a:
        d[sample[col_index]].append(list(sample))
#     for key in d:
#         d[key].extend([[0]*a.shape[1] for _ in range(max_len-len(d[key]))])
    return list(d.values()), [len(_) for _ in d.values()]

samples, sizes = groupby(origin_data, 2)
# 第二步,根据当前这一批次的中最大序列长度max(sizes)作为padding标准(不同批次的样本序列长度可以不一样,但同一批次要求一样(包括padding的部分)),当然也可以一次性将所有样本(不按照批量)按照最大序列长度padding也行,可能空间浪费
paddig_samples = np.zeros([len(samples), max(sizes), 3])
for seq_index, seq in enumerate(samples):
    paddig_samples[seq_index, :len(seq), :] = seq
paddig_samples
Mamba与选择性状态空间模型:线性复杂度时序建模新范式 状态空间模型(SSM)作为源自控制理论的序列建模基础框架,近年来因Mamba引入‘选择性’机制而焕发新生——它将传统静态状态转移升级为由输入动态门控的线性递归过程,从而在保持O(N)时间复杂度的同时,显著提升长程依赖建模能力。相比Transformer的O(N²)注意力和RNN/LSTM的串行非线性瓶颈,SSM凭借可并行扫描(selective scan)、数值稳定离散化及HiPPO初始化等关键技术,在法律文书解析、实时语音流处理、边缘端时序分析等对延迟与显存极度敏感的工业场景中展现出不可替代的工程价值。本 阅读详情

相关推荐

神经网络架构选型实战:从数据形态与工程约束出发

神经网络架构本质上是函数逼近的工程实现,其选择并非由任务名称决定,而是取决于数据形态、计算预算和泛化需求三大硬约束。理解CNN的空间局部性、RNN的时序建模能力、Transformer的全局注意力机制及MLP对结构化数据的鲁棒性,是构建可靠模型的基础。在工业落地中,ResNet的残差连接、MobileNet的深度可分离卷积、LSTM的门控设计等,均是对特定硬件条件(如边缘设备显存)、数据规模(如小样本工业缺陷)和业务目标(如高召回率故障检测)的精准响应。本文聚焦真实项目中的架构决策逻辑,避免理论空谈,直击‘

weixin_34174105的博客 412

循环神经网络RNN LSTM Pytorch的运用 padding处理

Theroy 详细展示RNN的网络结构 循环神经网络(Recurrent Neural Network,RNN)和 LSTM RNN理解 常见RNN及其架构 Theroy with code RNN,写起来真的烦 explain each parameters of RNN in pytorch: 最简单的RNN回归模型入门(PyTorch) 一个使用RNN进行财务预测的PyTorch示例(...

Yummy_Ou 2297

自动驾驶VLA模型算法设计:视觉-语言-动作统一建模实战

端到端视觉-语言-动作(VLA)模型是自动驾驶决策范式演进的核心方向,其本质是将多模态感知、自然语言理解与车辆级动作生成耦合于统一神经表征空间。不同于传统模块化流水线的语义失真与时序割裂,VLA通过原始模态输入、动作导向隐空间和闭环训练,实现从像素与语音到方向盘转角、加速度等物理执行量的直连映射。该技术显著压缩系统延迟、提升长尾场景鲁棒性,并支撑语音指令驱动的具身决策。本文聚焦真实落地中的算法设计硬核问题:双塔交叉注意力架构选型、物理约束下的动作标注方法、渐进式课程训练策略,以及实车部署中的时序补偿与光照不

掬水月在手,弄花香满衣 451

pytorch处理RNN输入变长序列padding

pytorch处理RNN输入变长序列padding 一、为什么RNN需要处理变长输入 假设我们有情感分析的例子,对每句话进行一个感情级别的分类,主体流程大概是下图所示: 但是 当进行批次(batch)训练时,会存在很多训练样例长度不同的情况,这就需要padding,将短句子padding为跟最长的句子一样。 比如向下图这样: 但是这会有一个问题,什么问题呢?比如上图,padding了5的pad符号,导致 LSTM 通过了非常多无用字符,这样得到的句子表示就会有误差,更直观的如下图: 正确的做法应该是?

weixin_40011280的博客 1363

向量嵌入实操手册:从数学原理到RAG生产落地

向量嵌入是现代语义检索的基石,其本质是将文本映射至高维连续空间,通过余弦相似度度量语义距离——这并非黑箱,而是基于对比学习、自注意力机制和球面几何的可解释数学过程。它解决了关键词匹配无法应对的‘同义不同词、同词不同义’难题,在电商搜索、智能客服、政策问答等场景中显著提升召回率与业务准确率。实际落地需兼顾模型选型(如BGE-M3 vs text-embedding-3-small)、预处理标准化(全角转半角、标点归一化)、批处理显存优化(动态分桶、平方级增长预警)及向量数据库选型(Qdrant兼顾性能与属性过

weixin_33985679的博客 316

基于Transformer+CNN的混合架构网络入侵检测系统实践

网络空间安全日益严峻,入侵检测系统(IDS)是保障网络安全的关键技术之一。传统IDS依赖规则匹配或统计建模,面对新型攻击与加密流量时更新滞后、漏报率高。深度学习的引入将入侵检测转化为数据驱动的分类问题,通过自动学习流量特征来识别已知与未知威胁。其中,CNN擅长提取局部特征,Transformer具备强大的全局依赖建模能力,两者结合的混合架构能够兼顾检测精度与训练效率。本文基于公开数据集CICIDS2017,实现了一套Transformer+CNN混合架构的入侵检测系统,覆盖数据清洗、特征工程、模型设计、类别

weixin_34253126的博客 427

pytorch中 nn.utils.rnn.pack_padded_sequence和nn.utils.rnn.pad_packed_sequence

1. 官方文档: torch.nn — PyTorch 1.11.0 documentation 2. 应用背景: 在使用pytorch处理数据时,一般是采用batch的形式同时处理多个样本序列,而每个batch中的样本序列是不等长的,导致rnn无法处理。所以,通常的做法是先将每个batch按照最长的序列进行padding处理等长的形式。 但padding操作会带来一个问题,那就是对于多数进行padding过的序列,会导致rnn对它的表示多了很多无用的字符,我们希望的是在最后一个有用的字符后就.

m0_46483236的博客 7398

基于DFT的scanshift sdc模板(DFT)

摘要:本文详细介绍了DFT测试模式下的SDC约束方法。

murphyrong的博客 885

【Reverse】Tensorflow中屏蔽Padding处理变长序列的双向LSTM

转自:https://blog.youkuaiyun.com/okcd00/article/details/80010193 通常我们处理双向LSTM的时候,序列长短不一参差不齐,就不可避免的需要进行padding, 实际上句子长度可能如下所示,为[2, 4, 5],就需要被padding成这样才能作为矩阵传入计算: array([[1, 2, 0, 0, 0], [2, 1, 4, 3...

orangefly0214的博客 957

大模型微调框架之TRL

近年来,大语言模型(LLMs)的快速发展推动了下游应用的繁荣,但如何高效地对这些模型进行对齐和微调,依然是研究与应用的热点。Hugging Face 开源的 TRL(Transformer Reinforcement Learning) 框架,提供了基于强化学习的语言模型训练方法,并支持 SFT(监督微调)、PPO(近端策略优化)、DPO(直接偏好优化)等多种方式,是目前对齐和微调 LLM 的重要工具。

和大家一起涨芝士 904

带有验证码的爆破(包含Burp suite工具爆破)

关于含有验证码爆破的一些总结!

weixin_43960066的博客 8693

lstm 变长序列_keras在构建LSTM模型时对变长序列的处理操作

我就废话不多说了,大家还是直接看代码吧~补充知识:RNN(LSTM)数据形式及Padding操作处理变长时序序列dynamic_rnnSummaryRNN样本一样,计算的状态值和输出结构一致,也即是说只要当前时刻的输入值也前一状态值一样,那么其当前状态值和当前输出结果一致,因为在当前这一轮训练中权重参数和偏置均未更新RNN的最终状态值与最后一个时刻的输出值一致输入数据要求格式为,shape=(ba...

weixin_39559277的博客 258

Orbbec-Gemini-335 深度相机 Python SDK 编译与配置全记录(Windows 环境)

本篇博客将围绕 Windows 系统下 Orbbec SDK 的 Python 配置与编译过程进行详细说明,主要使用的是官方提供的 pyorbbecsdk Python wrapper 项目以及 Orbbec SDK V2 Python Wrapper 配置指南,并记录了安装与配置过程中遇到的若干问题及解决办法。

Junseer的博客 1965

RNN学习笔记(疑惑点)

1.RNN中的input:batch_size,time_steps,input_size. batch_size是数据的批次,将全部数据划分为n批进行训练; time_steps为时间步,比如输入为一句话,每一步则为每一个字; input_size为输入数据本身的维度; (1) 1行数据 * batch = 全部数据 (2) 1行数据被分为了 n个timestep 所以要把输入数据转化为三维。 ...

Doodlera的博客 658

别再硬编码了!WinCC子画面动态加载的5种C脚本写法对比

本文深入解析WinCC子画面动态加载的5种C脚本实现方案,包括基础加载、路径动态解析、多语言切换、窗口自适应布局和混合架构交互。通过代码示例和场景分析,帮助开发者避免硬编码问题,提升工业自动化系统的交互效率和可维护性。特别推荐路径动态解析方案,有效解决项目路径管理的痛点。

weixin_29008691的博客 476

【Unity实战】HybridCLR热更快速集成

本文假设你已经通过UPM导入了HybridCLR、Addressables、il2cpp支持并具有一定的C#基础和Unity编辑器操作能力。

u012587406的博客 4995

Seq2Seq model个人小记

Seq2Seq model个人小记 Seq2Seq模型在许多自然语言处理的任务中表现良好,比如:机器翻译,聊天机器人等。它主要由两个RNN(经常使用LSTM或者GRU)模块构成,分别充当encoder和decoder的角色,encoder有序的读取不同长度的输入,每个timestep读取一个symbol(word),encoder把不同长度的句子(inputs)转换为固定长度的向量c,decod

yunnangf的博客 2123

柑橘病虫害识别方案总结

1. 方案一 1.1 赛题背景 1.2 数据分析 1.3 模型设计 1.3.1 模型具体方案 1.3.2 模型设计 1.4 实验结果 1.5 总结与展望 2. 方案二 2.1 赛题介绍 2.2 数据分析 2.3 算法方案解析 2.3.1 检测模型 2.3.2 提升策略 2.4 优化思路 3. 方案三 3.1 数据分析 3.1.1 数据说明 3.2 技术展示 3.2.1 数据输入端 3.2.2 模型结构端 3.2.3 上下文信息 3.2.4 训练优化端 3.2.5 创新性分析 3.3 算法及系统思考.....

herosunly的博客 2万+

【NLP自然语言处理】19.基础-BERT系列模型介绍

BERT系列模型介绍, bert模型架构,预微调模块,bert的预训练任务,MLM,NSP,BERT,GPT,ELMo各自的优缺点

资深系统架构,深耕高并发研发与 AI 大模型工程化落地。技术栈以 Python (AI/NLP/RAG/Agent) 与 Golang (高并发架构) 为双核心,兼具 PHP 大型应用经验。专注算法落地、复杂系统设计及团队技术赋能 322

30天入门 SAP BTP 开发系列之一:SAP 开发顾问为什么要学习 SAP BTP 开发?能带来哪些收获?

国内 SAP 开发顾问们的微信朋友圈,最近可能都被 SAP 和阿里这两家巨头宣布合作的重磅消息刷屏了吧。近日,德国软件巨头SAP SE与中国电商巨头阿里巴巴集团宣布建立战略合作伙伴关系。根据协议,阿里巴巴集团将利用 SAP Cloud ERP Private 强化企业基础设施,并采用联合上市策略为全球客户创造卓越价值。阿里巴巴将集成 SAP Business Suite,以简化系统维护与升级流程,并实现 AI 功能与核心业务流程的无缝整合。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2381

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

用户建模核心技术解析:从Embedding到多兴趣与图神经网络的实践

用户建模是构建个性化推荐与搜索系统的核心基础,其本质是通过数学与算法将用户抽象为可计算的表示。其原理经历了从基于属性的特征工程到矩阵分解,再到深度学习自动学习表征的演进。核心价值在于能够动态捕捉用户兴趣、偏好与意图,从而提升内容分发与商品推荐的精准度。在技术实现上,用户Embedding学习、序列建模和多兴趣挖掘已成为关键实践。其中,基于Transformer的序列模型能有效捕捉长期依赖,而多兴趣建模(如MIND框架)则解决了单一向量表示兴趣混杂的问题。这些技术广泛应用于电商“猜你喜欢”、信息流推荐、广告精

weixin_34160277的博客 318

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

PyTorch

PyTorch 是一个开源的机器学习库,主要用于进行计算机视觉(CV)、自然语言处理(NLP)、语音识别等领域的研究和开发。 PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理。

qq_32381773的博客 183

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

五大经典深度神经网络实战:从CNN到Transformer的PyTorch实现

深度神经网络作为人工智能的核心技术,通过模拟人脑神经元连接方式,实现了从数据中自动学习复杂模式的能力。其核心原理在于多层次的非线性变换与特征抽象,通过反向传播算法优化网络参数。这一技术价值在于能够处理高维、非结构化的海量数据,在图像识别、自然语言处理、序列预测等领域展现出强大性能。在应用场景上,卷积神经网络擅长处理图像等网格数据,循环神经网络及其变体LSTM专攻序列建模,生成对抗网络实现了数据生成与增强,而基于自注意力机制的Transformer则革新了序列处理范式。本文聚焦于这五大经典架构,通过PyTor

weixin_30587927的博客 296

05阶段:NLP自然语言处理基础(2)

本文系统讲解了NLP中的迁移学习,重点介绍了fastText工具的使用及其模型原理。主要内容包括: fastText工具概述:fastText是Facebook开发的NLP工具包,具有文本分类和词向量训练两大功能,优势在于速度快、精度高。其安装简单,通过pip即可完成。 fastText模型架构:基于类似CBOW的三层结构,使用层次softmax和负采样提升效率。层次softmax通过哈夫曼树实现多类别高效分类;负采样通过随机选择部分负样本来降低计算量。 应用实践:详细演示了使用fastText进行文本分类

专注前端开发领域,深耕 Python AI Agent应用开发,热爱探索 Web 与人工智能的前沿技术。 503

mHC:重构神经网络信息流的动态路由架构

神经网络的信息传递本质是通信问题,而非单纯计算。传统架构将层间连接视为静态管道,导致梯度失衡、状态冗余与拓扑僵化等底层通信效率瓶颈。mHC提出‘神经高速公路’新范式,通过层间解耦、动态路由和可重构拓扑三大机制,实现信息流从被动承载到主动调度的跃迁。其核心创新在于Path Controller与State Keeper协同构成的实时交通管制系统,支持梯度感知决策、无感状态缓存与互信息驱动的连接演化。该技术显著提升大模型训练稳定性、多模态融合鲁棒性及边缘部署能效,适用于视觉、语言、时序等广泛任务场景。

cuanmo8775的博客 387

【机器学习】一文搞懂反绎学习(Abductive Learning,简称ABL) 完整源码复现

反绎学习的系统架构(周志华团队)反绎学习问题的严格形式化采用四元组结构,明确界定系统的各个组成部分及其相互关系。输入空间由原始数据分布定义,包含从感知环境获取的未标注或弱标注实例。这些实例通常以高维向量形式呈现,如图像像素、文本序列或传感器读数。原始数据分布刻画了问题域的统计特性,是机器学习模块的训练基础。逻辑事实空间建立了从原始数据到符号表示的映射。感知模型将输入实例转换为符号事实的候选集合,这些事实构成逻辑推理的观察前提。

u012133341的博客 701
上一篇: TensorFlow中髙维张量乘法运算(RNN批量序列损失计算)
下一篇: golang并发(同步)多任务高性能执行&聚合
mlee1018
博客等级 码龄12年 36粉丝 57原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值