我正在尝试在Pytorch中实现seq2seq模型,并且在批处理方面遇到了一些问题。例如,我有一批数据,其维度为
[batch_size,sequence_lengths,encoding_dimension]
其中批次中每个示例的序列长度都不同。
现在,我设法通过将批处理中的每个元素填充到最长序列的长度来进行编码。
这样,如果我将与上述形状相同的批次作为输入输入到我的网络中,则会得到以下输出:
形状的输出
[batch_size, sequence_lengths, hidden_layer_dimension]形状的隐藏状态
[batch_size, hidden_layer_dimension]细胞状态,形状
[batch_size, hidden_layer_dimension]
现在,从输出中,我为每个序列获取最后一个相关元素,即沿着sequence_lengths维度的元素与序列的最后一个非填充元素相对应。因此,我得到的最终输出是定型的[batch_size, hidden_layer_dimension]。
但是现在我有从这个向量解码它的问题。如何处理同一批中不同长度的序列的解码?我试图用Google搜索它,发现了这个问题,但是他们似乎并没有解决这个问题。我本来打算对整个批处理逐个元素进行处理,但是我遇到了传递初始隐藏状态的问题,因为来自编码器的状态是形状[batch_size, hidden_layer_dimension],而来自解码器的状态是形状[1, hidden_layer_dimension]。
我想念什么吗?谢谢您的帮助!