PyTorch RNN代码中rnn返回下划线与out[:, -1, :]含义问询
out = self.fc(out[:, -1, :])的作用
PyTorch中RNN层的第一个返回值out的形状为 (batch_size, seq_length, hidden_size * 双向系数),三个维度分别代表批次内样本索引、序列时间步索引、隐藏层特征维度:
- 切片
[:, -1, :]的作用是筛选每个样本序列最后一个时间步的隐藏层输出:第一个:代表取批次内所有样本,-1代表取序列的最后一个时间步,第三个:代表取该时间步的全部隐藏层特征 - 分类场景下,序列最后一个时间步的输出已经聚合了整个输入序列的上下文信息,把这个特征传入全连接层
fc,即可将隐藏层特征映射为和类别数对应的输出,作为最终的分类预测结果
另外从你代码里h0维度乘2、全连接层输入维度为hidden_size*2的写法来看,你的RNN应该是双向结构,注意nn.RNN初始化时要补加bidirectional=True参数,否则会出现维度不匹配报错。
out, _ = self.rnn(x, h0)中下划线_的含义
PyTorch的RNN层前向传播默认返回两个值:
- 第一个返回值:所有时间步的隐藏层输出,也就是代码里的
out - 第二个返回值:最后一个时间步的隐藏状态(如果是LSTM还会额外返回细胞状态),形状为
(num_layers * 双向系数, batch_size, hidden_size),通常用于序列生成、或者需要接续传递隐藏状态的场景
下划线_是Python的通用惯例写法,代表这个位置的返回值后续用不到,不需要赋值给具体变量,直接忽略即可。你这段代码里只需要用到所有时间步的输出,不需要单独取最后一步的隐藏状态,所以用_接收后就可以丢弃。
内容的提问来源于stack exchange,提问作者Lb4340
相关产品推荐
相关产品推荐

