欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

seq训练时batch_size 个数据进行转置

程序员文章站 2022-05-31 19:01:31
...

文章参考:https://www.tinymind.cn/articles/205    作者 | 李理


在实现seq2seq时,对模型的输入encoder_inputs会进行转置操作:

# 以下为将数据进行reshape操作,变成 "序列长度*batch_size" 格式的数据  
# Batch encoder inputs are just re-indexed encoder_inputs.
for length_idx in range(encoder_size):
    batch_encoder_inputs.append(
        np.array([encoder_inputs[batch_idx][length_idx] 
        for batch_idx in range(self.batch_size)], dtype=np.int32))

以下摘用参考文章的话:
encoder list 的大小是batch_size,list的每个元素是一个序列(句子)。这样我们可以得到一个(batch_size x max_len) 的Tensor,但是因为训练时我们需要逐个时刻的计算 batch_size 个数据,所以我们需要把它转置成(max_len x batch_size)。 这样tensor[t] 就表示 t 时刻 的batch_size 个词,转置过程如图所示:


seq训练时batch_size 个数据进行转置

图1 原始encoder padding


seq训练时batch_size 个数据进行转置

图2 转置


因此,seq2seq对模型的输入encoder_inputs进行转置操作,是基于时序的考虑。不同batch的同一时刻保存到一个序列中。