[技术笔记]PyTorch中用于RNN变长序列填充函数的简单使用

本文探讨了PyTorch中RNN处理变长序列的问题,介绍并提供了pack_padded_sequence和pad_packed_sequence函数的代码示例,用于在分批处理时对序列进行填充操作。
摘要由CSDN通过智能技术生成

1、PyTorch中RNN变长序列的问题

  RNN在处理变长序列时有它的优势。在分批处理变长序列问题时,每个序列的长度往往不会完全相等,因此针对一个batch中序列长度不一的情况,需要对某些序列进行PAD(填充)操作,使得一个batch内的序列长度相等。
  PyTorch中的pack_padded_sequence和pad_packed_sequence可处理上述问题,以下用一个示例演示这两个函数的简单使用方法。

2、填充函数简介

“压缩”函数:用于将填充后的序列tensor进行压缩,方便RNN处理
pack_padded_sequence(input, lengths, batch_first=False, enforce_sorted=True)

	(1)input->被“压缩”的tensor,维度一般为[batch_size,_max_seq_len[,embedding_size]]或者[max_seq_len,batch_size[,embedding_size]]
	若input维度为:[batch_size,_max_seq_len[,embedding_size]]
		要将batch_first设置为True,这表示input的第一个维度为batch的数量
	若input维度为:[max_seq_len,batch_size[,embedding_size]]
		要将batch_first设置为False(默认值),这表示input的第一个维度不是batch的数量
	(2)lengths->lengths参数表示一个batch中序列真实长度,类型为列表,在例子中详细说明
	(3)batch_first->表示batch的数量是否在input的第一维度,默认值为False
	(4)enforce_sorted->input中的会自动按照lengths的情况进行排序,默认值为
	
“解压”函数:该函数与"压缩函数"相对应,经“压缩函数”处理的输入经过RNN得到的最终结果可以利用该函数进行“解压”
pad_packed_sequence(sequence, batch_first=False, padding_value=0.0, total_length=None):

	(1)sequence->压缩函数处理过的input经RNN后得到的结果
	(2)batch_first->与“压缩”函数中的batch_first一致
	(3)padding_value->序列进行填充时使用的索引,默认为0
	(4)total_length->暂略

3、PyTorch代码示例

代码如下(示例):

# Create by leslie_miao on 2020/11/1

import torch
import torch.nn as nn

d_model = 10 # 词嵌入的维度
hidden_size = 20 # lstm隐藏层单元数量
layer_num = 
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值