pytorch 笔记:PAD_PACKED_SEQUENCE 和PACK_PADDED_SEQUENCE

1 PACK_PADDED_SEQUENCE

1.0 功能

  • 将填充的序列打包成一个更加紧凑的形式
  • 这样RNN、LSTM和GRU等模型可以更高效地处理它们,因为它们可以跳过不必要的计算

1.2 基本使用方法

python 复制代码
torch.nn.utils.rnn.pack_padded_sequence(
    input, 
    lengths, 
    batch_first=False, 
    enforce_sorted=True)

1.3 参数

|----------------|--------------------------------------------------------------------------------------------------------------------------------|
| input | * 一个大小为T×B×*的张量 * T是最长序列的长度 * B是批次大小 * *表示任意数目的维度 |
| lengths | 每个批次元素的序列长度的列表 |
| batch_first | 如果batch_first是True,那么期望的输入格式是B x T x * |
| enforce_sorted | 如果设置了enforce_sorted=True,序列应该按长度降序排列。这意味着input[:,0]应该是最长的序列,input[:,B-1]应该是最短的。 如果enforce_sorted设置为False,输入序列将无条件地被排序。 |

1.4 举例

python 复制代码
import torch
from torch.nn.utils.rnn import pack_padded_sequence

# 输入序列
input_seq = torch.tensor([[6, 8, 9, 0], [5, 7, 0, 0], [1, 0, 0, 0]])

# 序列的实际长度
lengths = [3, 2, 1]

# 使用pack_padded_sequence
packed = pack_padded_sequence(input_seq, lengths, batch_first=True)

packed
#PackedSequence(data=tensor([6, 5, 1, 8, 7, 9]), batch_sizes=tensor([3, 2, 1]), sorted_indices=None, unsorted_indices=None)

2 pad_packed_sequence

对一个已打包的序列进行解包,这个打包的序列通常是通过pack_padded_sequence函数从一个填充的序列得到的

2.1 基本使用方法

python 复制代码
torch.nn.utils.rnn.pad_packed_sequence(
    sequence, 
    batch_first=False, 
    padding_value=0.0, 
    total_length=None)

2.2 参数说明

|---------------|----------------------------------------------------|
| sequence | 要解包的已打包序列 |
| batch_first | 指示输出的维度顺序。如果为True,输出将为B x T x *格式,否则为T x B x *格式 |
| padding_value | 用于填充的值,通常是0 |
| total_length | 可选的。如果指定,输出序列将被填充到这个长度 |

2.3 举例

还是之前的packed

python 复制代码
from torch.nn.utils.rnn import pad_packed_sequence

pad_packed_sequence(packed)
'''
(tensor([[6, 5, 1],
         [8, 7, 0],
         [9, 0, 0]]),
 tensor([3, 2, 1]))
'''

pad_packed_sequence(packed, batch_first=True,total_length=5)
'''
(tensor([[6, 8, 9, 0, 0],
         [5, 7, 0, 0, 0],
         [1, 0, 0, 0, 0]]),
 tensor([3, 2, 1]))
'''
相关推荐
随性而行3603 分钟前
微信API接口与AI自动化:开发者的实现思路
运维·服务器·开发语言·人工智能·微信·自动化
东风破_5 分钟前
Mini Cursor 为什么离不开 path 和 fs?Node.js 路径处理与异步文件读写
人工智能
jianwuhuang8215 分钟前
deepseek 生成的图表怎么导出?AI 导出鸭多方案详解
人工智能·ai·chatgpt·ai导出鸭
茶马古道的搬运工15 分钟前
AI 深度技能之-解读Hermes Agent(五)- 并非只有 Kanban
人工智能
我爱吃土豆115 分钟前
AI Agent 的工作原理:从大模型问答到自主执行任务
人工智能·搜索引擎·百度·agent
神奇小汤圆20 分钟前
从BRD到知识库-两个Skill把需求变成AI能查的知识
人工智能
Lucky_luckyZzz22 分钟前
销售会话分析与智能工牌实测红榜:灵听工牌如何成为B2B销售效率提升的选型标杆?
大数据·人工智能
YFJ_mily38 分钟前
【草原研学】第二届可信大数据与人工智能学术会议(ICTBAI 2026)
人工智能·rdlink研发家·可信大数据·内蒙古会议·包头会议·acm出版
没落英雄43 分钟前
6. 从零搭建一个 AI Agent —— 构建 Web 前端,让用户能和 agent 实时交互
前端·人工智能·架构
m0_4665252944 分钟前
从“算法内卷”到“可信易用” 东软多模态医学人工智能平台开启无代码科研新时代
人工智能·算法