[英]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)
我们如何将其传递给例如NStepGRU
中的NStepGRU
链接? 并例如获得所有序列的最终隐藏状态(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
[x[i, :l] for i, l in enumerate(lengths)]
NStepGRU
[x[i, :l] for i, l in enumerate(lengths)]
传递给NStepGRU
。
NStepGRU
返回ys
最后一层的输出和hs
最终的隐藏状态。 由于NStepGRU
可能包含多个层,因此为每个层提供了最终的隐藏状态。 即ys
具有形状(num_layers, batch_size, embedding_size)
。 如果使用单层NStepGRU
,则只需提取hs[0]
返回形状的最终隐藏状态(batch_size, embedding_size)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.