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

pytorch笔记:PackedSequence对象送入RNN

pytorch 笔记:PAD_PACKED_SEQUENCE 和PACK_PADDED_SEQUENCE-CSDN博客 

  • 当使用pack_padded_sequence得到一个PackedSequence对象并将其送入RNN(如LSTM或GRU)时,RNN内部会进行特定的操作来处理这种特殊的输入形式。
  • 使用PackedSequence的主要好处是提高效率和计算速度。因为通过跳过填充部分,RNN不需要在这些部分进行无用的计算。这特别对于处理长度差异很大的批量序列时很有帮助。

1 PackedSequence对象

  • PackedSequence是一个命名元组,其中主要的两个属性是databatch_sizes
    • data是一个1D张量,包含所有非零长度序列的元素,按照其在批次中的顺序排列。
    • batch_sizes是一个1D张量,表示每个时间步的批次大小
  • PackedSequence(data=tensor([6, 5, 1, 8, 7, 9]),batch_sizes=tensor([3, 2, 1]), sorted_indices=None, unsorted_indices=None)

 2 处理PackedSequence

  • 当RNN遇到PackedSequence作为输入时,它会按照batch_sizes中指定的方式对data进行迭代
  • 举例来说,上面例子中batch_sizes[3,2,1],那么RNN首先处理前3个元素,然后是接下来的2个元素,最后是最后一个元素。
  • 这允许RNN仅处理有效的序列部分,而跳过填充

3 输出

  • 当RNN完成对PackedSequence的处理后,它的输出同样是一个PackedSequence对象
  • 可以使用pad_packed_sequence将其转换回常规的填充张量格式,以进行后续操作或损失计算
  • 隐藏状态和单元状态(对于LSTM)也会被返回,这些状态与未打包的序列的处理方式相同

4  举例

  • 假设我们有以下3个句子,我们想要用RNN进行处理:
I love AI
Hello
PyTorch is great
  • 为了送入RNN,我们首先需要将这些句子转换为整数形式,并进行填充以保证它们在同一个批次中有相同的长度。
{'PAD': 0,'I': 1,'love': 2,'AI': 3,'Hello': 4,'PyTorch': 5,'is': 6,'great': 7
}
  • 句子转换为整数后(id):
  1. I love AI -> [1, 2, 3]
  2. Hello -> [4]
  3. PyTorch is great -> [5, 6, 7]
  • 为了将它们放入同一个批次,我们进行填充:
[1, 2, 3]
[4, 0, 0]
[5, 6, 7]
  • 假设每个单词的id 对应的embedding就是自己:
[[1], [2], [3]]
[[4], [0], [0]]
[[5], [6], [7]]
  • 使用pack_padded_sequence进行处理
import torch
from torch.nn.utils.rnn import pack_padded_sequence# 输入序列
input_seq = torch.tensor([[1,2,3], [4, 0, 0], [5,6,7]])
input_seq=input_seq.reshape(data.shape[0],input_seq.shape[1],1)
#每个单词id的embedding就是他自己
input_seq=input_seq.float()
#变成float是为了喂入RNN所需# 序列的实际长度
lengths = [3, 1, 3]# 使用pack_padded_sequence
packed = pack_padded_sequence(input_seq, lengths, batch_first=True,enforce_sorted=False)packed
'''
PackedSequence(data=tensor([[1.],[5.],[4.],[2.],[6.],[3.],[7.]]), batch_sizes=tensor([3, 2, 2]), sorted_indices=tensor([0, 2, 1]), unsorted_indices=tensor([0, 2, 1]))
'''
  • 现在,当我们将此PackedSequence送入RNN时,RNN首先处理前3个元素,因为batch_sizes的第一个元素是3。然后,它处理接下来的2个元素,最后处理剩下的2个元素。
    • 具体来说,RNN会如下处理:

      • 时间步1:根据batch_sizes[0] = 3,RNN同时处理三个句子的第一个元素。具体地说,它处理句子1的"I",句子2的"PyTorch",和句子3的"Hello"。
      • 时间步2:根据batch_sizes[1] = 2,RNN处理接下来两个句子的第二个元素,即句子1的"love"和句子2的"is"。
      • 时间步3:根据batch_sizes[2] = 2,RNN处理接下来两个句子的第三个元素,即句子1的"AI"和句子2的"great"。
  • 喂入RNN
import torch.nn as nnclass SimpleRNN(nn.Module):def __init__(self,input_size,hidden_size,num_layer=1):super(SimpleRNN,self).__init__()self.rnn=nn.RNN(input_size,hidden_size,num_layer,batch_first=True)def forward(self,x,hidden=None):packed_output,h_n=self.rnn(x,hidden)return packed_output,h_n
#单层的RNNSrnn=SimpleRNN(1,3)
Srnn(packed_data) 
'''
(PackedSequence(data=tensor([[-0.1207, -0.0247,  0.4188],[-0.3173, -0.0499,  0.6838],[-0.4900, -0.0751,  0.8415],[-0.7051, -0.1611,  0.9610],[-0.7497, -0.2117,  0.9829],[-0.3361, -0.1660,  0.9329],[ 0.4608, -0.0492,  0.1138]], grad_fn=<CatBackward0>), batch_sizes=tensor([3, 2, 2]), sorted_indices=None, unsorted_indices=None),tensor([[[-0.3361, -0.1660,  0.9329],[ 0.4608, -0.0492,  0.1138],[-0.4900, -0.0751,  0.8415]]], grad_fn=<StackBackward0>))
'''
  • 得到的RNN输出是pack的,hidden state没有变化
    • Srnn=SimpleRNN(1,3)
      Srnn(packed_data) 
      '''
      (PackedSequence(data=tensor([[-0.1207, -0.0247,  0.4188],[-0.3173, -0.0499,  0.6838],[-0.4900, -0.0751,  0.8415],[-0.7051, -0.1611,  0.9610],[-0.7497, -0.2117,  0.9829],[-0.3361, -0.1660,  0.9329],[ 0.4608, -0.0492,  0.1138]], grad_fn=<CatBackward0>), batch_sizes=tensor([3, 2, 2]), sorted_indices=None, unsorted_indices=None),tensor([[[-0.3361, -0.1660,  0.9329],[ 0.4608, -0.0492,  0.1138],[-0.4900, -0.0751,  0.8415]]], grad_fn=<StackBackward0>))
      '''pad_packed_sequence(Srnn(packed_data)[0],batch_first=True)
      '''
      (tensor([[[-0.1207, -0.0247,  0.4188],[-0.7051, -0.1611,  0.9610],[-0.3361, -0.1660,  0.9329]],[[-0.3173, -0.0499,  0.6838],[-0.7497, -0.2117,  0.9829],[ 0.4608, -0.0492,  0.1138]],[[-0.4900, -0.0751,  0.8415],[ 0.0000,  0.0000,  0.0000],[ 0.0000,  0.0000,  0.0000]]], grad_fn=<TransposeBackward0>),tensor([3, 3, 1]))
      '''

相关文章:

pytorch笔记:PackedSequence对象送入RNN

pytorch 笔记&#xff1a;PAD_PACKED_SEQUENCE 和PACK_PADDED_SEQUENCE-CSDN博客 当使用pack_padded_sequence得到一个PackedSequence对象并将其送入RNN&#xff08;如LSTM或GRU&#xff09;时&#xff0c;RNN内部会进行特定的操作来处理这种特殊的输入形式。 使用PackedSequ…...

C#WPF工具提示(ToolTip)实例

本文演示C#WPF工具提示(ToolTip)实例 ToolTip ToolTip是当鼠标移到某个控件上后可以弹出提示的控件 属性说明 1、HasDropShadow 决定工具提示是否具有扩散的黑色阴影,使其和背后的窗口区别开来 2、Placement 使用PlacementMode枚举值决定如何放置工具提示。默认值是M…...

智慧矿山系统中的猴车安全监测与识别

智慧矿山是近年来兴起的一种采用人工智能&#xff08;AI&#xff09;技术的矿山管理方式&#xff0c;它通过利用智能传感设备和先进算法来实现对矿山环境和设备进行监测和管理&#xff0c;从而提高矿山的安全性和效率。在智慧矿山的AI算法系列中&#xff0c;猴车不安全行为识别…...

网络协议--TCP连接的建立与终止

18.1 引言 TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前&#xff0c;都必须先在双方之间建立一条连接。本章将详细讨论一个TCP连接是如何建立的以及通信结束后是如何终止的。 这种两端间连接的建立与无连接协议如UDP不同。我们在第11章看到一端使用UDP向另一端发…...

react条件渲染

目录 前言 1. 使用if语句 2. 使用三元表达式 3. 使用逻辑与操作符 列表渲染 最佳实践和注意事项 1. 使用合适的条件判断 2. 提取重复的逻辑 3. 使用适当的key属性 总结 前言 在React中&#xff0c;条件渲染指的是根据某个条件来决定是否渲染特定的组件或元素。这在构…...

Docker中Failed to initialize NVML: Unknown Error

参考资料 Docker 中无法使用 GPU 时该怎么办&#xff08;无法初始化 NVML&#xff1a;未知错误&#xff09; SOLVED Docker with GPU: “Failed to initialize NVML: Unknown Error” 解决方案需要的条件: 需要在服务器上docker的admin list之中. 不需要服务器整体的admin权限.…...

学习笔记|单样本秩和检验|假设检验摘要|Wilcoxon符号检验|规范表达|《小白爱上SPSS》课程:SPSS第十一讲 | 单样本秩和检验如何做?很轻松!

目录 学习目的软件版本原始文档单样本秩和检验一、实战案例二、统计策略三、SPSS操作1、正态性检验2&#xff0e;单样本秩和检验 四、结果解读第一&#xff0c;假设检验摘要第二&#xff0c;Wilcoxon符号检验结果摘要。第三&#xff0c;Wilcoxon符号秩检验图第四&#xff0c;数…...

ttkefu在线客服在客户联络领域的价值

随着互联网的快速发展&#xff0c;越来越多的企业开始注重在线客服的应用。ttkefu作为一款智能在线客服系统&#xff0c;在客户联络领域中展现出了巨大的价值。本文将详细介绍ttkefu在线客服在客户联络领域的应用优势、专家分析以及未来发展趋势。 一、ttkefu在线客服简介 tt…...

创新方案|2023如何用5种新形式重塑疫后实体门店体验

在电商盛行的当下&#xff0c;线上购物已成为新零售的重要组成部分&#xff0c;实体零售业正处于两难境地。一方面&#xff0c;实体零售是绝对有必要的&#xff1a;美国约 85% 的销售额来自实体商店。 另一方面&#xff0c;尽管增长放缓&#xff0c;但电商收入占销售总额的比例…...

Aqua Data Studio 2023.1

为什么选择 Aqua Data Studio&#xff1f; 随着数据在业务中的作用不断发展&#xff0c;组织需要一种有效的方法来简化复杂的技术任务并缩小 IT 和业务团队之间的差距。 使用多个数据库平台不再复杂。使用 Aqua Data Studio 简化您的所有数据管理流程和任务&#xff1a;这是一…...

【C++智能指针】

智能指针 为什么使用智能指针&#xff1f;概念分类auto_ptrunique_ptrshared_ptr循环引用weak_ptr 为什么使用智能指针&#xff1f; 考虑以下场景&#xff1a; void div() {int a, b;cin >> a >> b;if (b 0)throw invalid_argument("除0错误");return…...

gcc/g++使用格式+各种选项,预处理/编译(分析树,编译优化,生成目标代码)/汇编/链接过程(函数库,动态链接)

目录 gcc/g--编译器 介绍 使用格式 通用选项 编译选项 链接选项 程序编译过程 预处理(宏替换) 编译 (生成汇编) 分析树(parse tree) 编译优化 删除死代码 寄存器分配和调度 强度削弱 内联函数 生成目标代码 汇编 (生成二进制代码) 链接(生成可执行文件) 函…...

OSPF复习(2)

目录 一、LSA的头部 二、6种类型的LSA&#xff08;课堂演示&#xff09; 1、type1-LSA&#xff1a;----重要且复杂 2、type2-LSA&#xff1a; 3、type3-LSA&#xff1a; 4、type4-LSA&#xff1a; 5、type5-LSA&#xff1a; 6、type7-LSA&#xff1a; 三、OSPF的网络类…...

FPGA时序分析与约束(9)——主时钟约束

一、时序约束 时序引擎能够正确分析4种时序路径的前提是&#xff0c;用户已经进行了正确的时序约束。时序约束本质上就是告知时序引擎一些进行时序分析所必要的信息&#xff0c;这些信息只能由用户主动告知&#xff0c;时序引擎对有些信息可以自动推断&#xff0c;但是推断得到…...

sqlite3 关系型数据库语言 SQL 语言

SQL(Structured Query Language)语言是一种结构化查询语言,是一个通用的,功能强大的关系型数据库操作语言. 包含 6 个部分: 1.数据查询语言(DQL:Data Query Language) 从数据库的二维表格中查询数据,保留字 SELECT 是 DQL 中用的最多的语句 2.数据操作语言(DML) 最主要的关…...

spring boot中的多环境配置

1.切换环境 spring:profiles:include: devactive: dev的作用是为了启动某个环境&#xff0c;两个作用基本一致&#xff0c; 环境定义如下&#xff1a; spring:profiles: dev或者是查找application-dev.yml这个文件的所有配置 2.加载文件 spring:config:import:- optional:f…...

python3 阿里云api进行巡检发送邮件

python3 脚本爬取阿里云进行巡检 不确定pip能不能安装上&#xff0c;使用时候可以百度一下&#xff0c;脚本是可以使用的&#xff0c;没有问题的 太长时间了&#xff0c;pip安装依赖忘记那些了&#xff0c;使用科大星火询问了下&#xff0c;给了下面的&#xff0c;看看能不能使…...

【Linux】安装使用Nginx负载均衡,并且部署前端项目

目录 一、Nginx概述 1. 什么 2. 背景 3. 作用 二、Nginx负载均衡 1. 讲述 2. 使用 1. 下载 2. 安装 3. 负载均衡 三、前端部署 1. 准备 2. 部署 一、Nginx概述 1. 什么 Nginx是一个高性能的开源Web服务器和反向代理服务器。它具有轻量级、高并发、低内存消耗的…...

k8s中 pod 或节点的资源利用率监控

pod 或节点的资源利用率监控 1 简介2 Kubectl Top介绍3 生效kubectl top命令3.1 下载配置components.yaml3.2 修改配置components.yaml参数3 kubectl top 应用3.1 查看node节点的资源占⽤率3.2 查看pod的资源占⽤率1 简介 通过Kubectl Top命令,可以查看你k8snode节点或者pod的…...

订水商城实战教程07-搜索

目录 1 创建数据源2 首页搜索功能3 创建搜索页面4 搭建搜索结果页面总结 上一篇我们讲解了店铺信息的展示功能&#xff0c;本篇讲解一下搜索功能。通常小程序在首页都配置了搜索的功能&#xff0c;输入关键词进行检索&#xff0c;可以在结果页上进行选购。同时还记录了用户的搜…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...