如何将填充序列张量转换为预期的 RNN 格式?
How to convert padded sequence tensor to expected RNN format?
我有一个形状为 (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
link?例如获取所有序列的最终隐藏状态 (batch_size, embedding_size)
?
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
returns ys
最后一层的输出和 hs
最终隐藏状态。由于NStepGRU
可能包含多个层,因此为每一层提供了最终的隐藏状态;即,ys
的形状为 (num_layers, batch_size, embedding_size)
。如果你使用单层 NStepGRU
,只需提取 hs[0]
returns 形状 (batch_size, embedding_size)
.
的最终隐藏状态
我有一个形状为 (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
link?例如获取所有序列的最终隐藏状态 (batch_size, embedding_size)
?
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
returns ys
最后一层的输出和 hs
最终隐藏状态。由于NStepGRU
可能包含多个层,因此为每一层提供了最终的隐藏状态;即,ys
的形状为 (num_layers, batch_size, embedding_size)
。如果你使用单层 NStepGRU
,只需提取 hs[0]
returns 形状 (batch_size, embedding_size)
.