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

文章参考: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张图片

图1 原始encoder padding


seq训练时batch_size 个数据进行转置_第2张图片

图2 转置


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



你可能感兴趣的:(seq训练时batch_size 个数据进行转置)