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]))
'''
相关推荐
海上彼尚4 分钟前
Nodejs也能写Agent - 22.LangGraph篇 - 上下文工程
前端·javascript·人工智能·langchain·node.js
不言鹅喻7 分钟前
HarmonyOS ArkTS 实战:实现一个校园体育场馆预约应用
pytorch·华为·harmonyos
Tangyuewei22 分钟前
单 Agent 不够用了:AI 编程进入舰队模式
人工智能
艾斯特_23 分钟前
工作流与多Agent协作:LangGraph、MCP和A2A的应用分层
人工智能·python·ai
悟天特斯26 分钟前
智慧楼宇AI节能:从数据采集到智能决策的全链路实践
大数据·人工智能
腾视科技AIoT30 分钟前
私有云时代来临:AI NAS如何重塑你的数字生活?
人工智能·ai·生活·nas·企业存储·ainas·家庭存储
IT小盘31 分钟前
04-大模型流式输出原理-SSE与Python实现
开发语言·网络·人工智能·python
阳光是sunny37 分钟前
LangGraph实战教程:预定义状态MessagesState与AgentState
前端·人工智能·后端
网络工程小王38 分钟前
【HCIE-AI】11.模型 昇腾迁移适配-精度调试-性能调优
人工智能·学习·华为·迁移学习·昇腾