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]))
'''
相关推荐
深小乐2 小时前
我在 Anthropic ELI5 上加了5样东西,做成了更好用的 ELI5+
人工智能
John_ToDebug3 小时前
判断力无法被 AI 替代,但它正在被你亲手扔掉
经验分享·笔记
东风破_3 小时前
《LangGraph Memory:为什么 Agent 需要 Checkpointer?》
人工智能
锋行天下3 小时前
LangGraph 同级节点之间修改数据先后问题
人工智能
u1301303 小时前
AI 日报(2026年9月12日)
人工智能
东风破_3 小时前
《LangGraph Human-in-the-loop:Interrupt 如何让 Agent 等待人工确认》
人工智能
2601_962218613 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
智塑未来3 小时前
中文短剧出海翻译工具横评:VMEG AI、鬼手、Vozo AI、ElevenLabs怎么选?
人工智能
东风破_3 小时前
《LangGraph 条件路由与循环:如何让 Agent 自己决定下一步?》
人工智能
我爱吃土豆13 小时前
AI 编程工具远程开发指南:Codex 桌面版与 WorkBuddy 通过 SSH 连接云服务器实践
服务器·人工智能·ssh