理解序列分类任务的LSTM架构:PyTorch实现分类层输入验证
你的理解完全正确,传入最终分类层的确实是单层单向LSTM最后一个时间步的隐状态,每个样本对应hidden_size维的特征,和你绘制的示意图逻辑一致。
补充你可能关心的细节:
- PyTorch中单向单层LSTM返回的隐状态
h_t默认shape为(num_layers * num_directions, batch_size, hidden_size),你的代码配置了num_layers=1、bidirectional=False,所以h_t初始shape为(1, batch_size, 100),经过view(-1, self.hidden_size)变形后得到(batch_size, 100)的张量,刚好对应每个样本的最后一步隐状态。 - 你使用
nn.utils.rnn.pack_padded_sequence时设置了enforce_sorted=False,PyTorch会自动完成输入序列的排序、计算、顺序还原逻辑,最终得到的h_t和你输入的grouped_pooled_outs样本顺序完全一致。同时pack操作会屏蔽padding位的计算,每个样本的h_t是对应自身真实序列长度的最后一个时间步输出,而非padding后最长序列的末尾输出,这点无需担心。 - 你注释了全时间步输出的解包代码,也没有对LSTM的全时间步输出做任何聚合操作(比如均值池化、最大值池化),确实仅提取了最后一步隐状态输入分类层。
内容的提问来源于stack exchange,提问作者Luca Guarro
相关产品推荐
相关产品推荐

