【Pytorch】详解RNN网络中文本的pack和pad操作

1. 引言

RNN模型一般设定固定的文本长度(text sequence length,可理解为文本序列在时间维度上的步数 time step),以保证网络输出层数据维度的一致性。但在训练和测试时,难以保证输入文本长度的一致性,因此常常需要截断操作(即将超过预设长度的文本截断)和pad操作(即对不足预设长度的文本进行补0填充)。pad操作需满足:
(1)pad后,不足预设长度的文本用相同特征维度的0填充;
(2)pad的部分不参与forward和backward计算。

Pytorch中,在文本数据的transfrom以及RNN网络的输入阶段,均充分考虑了pad操作。其主要体现在:
(1)RNN、LSTM和GRU等网络的输入数据均可为PackedSequence类型数据;
(2)可通过pad_sequencepack_sequencepack_padded_sequencepad_packed_sequence等操作,实现pad和pack操作。

2. pack和pad操作

那么,究竟pad和pack操作对原始数据会有何影响?下面通过一个简单的示例来体现。

from torch.nn.utils.rnn import pack_sequence, pad_sequence,pad_packed_sequence, pack_padded_sequence, 

text1 = torch.tensor([1,2,3,4])    # 可视为有4个文字的样本
text2 = torch.tensor([5,6,7])  # 可视为有3个文字的样本
text3 = torch.tensor([8,9])    # 可视为有2个文字的样本
sequences = [text1, text2, text3]  # 三个文本序列
2.1 pack操作
[Input]  pack_sequence(sequences)
[Output] PackedSequence(data=tensor([1, 5, 8, 2, 6, 9, 3, 7, 4]), batch_sizes=tensor(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值