如何将填充序列张量转换为预期的RNN格式?

时间:2019-04-13 10:42:17

标签: python recurrent-neural-network chainer

我有一个(batch_size, max_sequence_length, embedding_size)形状的张量,该张量被填充到最大长度以存储序列。我也有(batch_size, max_sequence_length, vocab),例如:

# Batch size many, (batch_size, 4, 8)
[2,4,1,4]
[7,4,2,0]
[6,0,0,0]
# Using EmbedID(ignore_label=0) to get (batch_size, 4, embeddeding_size)

我们如何将其传递给例如Chainer中的NStepGRU链接?并例如获取所有序列(batch_size, embedding_size)的最终隐藏状态?

1 个答案:

答案 0 :(得分:1)

concat接受一批序列作为元素形式为new_df = pd.concat([df1, df2[['whatever_column_you_want_to_concatenate']]], axis=1) 的列表。注意,这里不需要填充。每个元素可以有不同的长度。

如果您的张量NStepGRU的形状为(sequence_length, embedding_size),并且序列的长度为x,则可以将(batch_size, max_sequence_length, embedding_size)传递给lengths

[x[i, :l] for i, l in enumerate(lengths)]返回NStepGRU最后一层的输出,NStepGRU返回最终的隐藏状态。由于ys可能包含多个图层,因此为每个图层都提供了最终的隐藏状态。即hs的形状为NStepGRU。如果您使用的是单层ys,则只需提取(num_layers, batch_size, embedding_size)即可返回形状NStepGRU的最终隐藏状态。