You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch自定义LSTM新闻分类模型不收敛问题求助

问题排查与解答

一、全连接层输入的正确性问题

你的全连接层输入处理存在错误,核心问题在于双向RNN的特征提取逻辑:

  • 双向RNN中,反向层是从序列末尾往开头处理的,因此反向层的最后一个有效输出对应原序列的第一个位置,而非最后一个位置。你当前取output_padded[-1, :, :]的前后两部分拼接,实际上反向部分取的是原序列开头的无效信息,无法正确整合双向的全局特征。
  • 正确的做法是直接使用RNN输出的hidden状态:对于双向LSTM/GRU,hidden的形状为(num_layers*2, batch_size, rnn_units),其中最后一层的正向状态是hidden[-2, :, :],反向状态是hidden[-1, :, :],将二者拼接后输入全连接层,才能得到每个序列的有效全局表示。

修改后的forward方法示例:

def forward(self, data, lens):
    x_embed = self.embedding(data) # (padded_lens, batch_size, embed_dim)
    x_packed = pack_padded_sequence(x_embed, lens.cpu(), enforce_sorted = False)
    if self.rnn_type == 'LSTM':
        output_packed, (hidden, cell) = self.rnn(x_packed)
    else:
        output_packed, hidden = self.rnn(x_packed)
    
    # 提取最后一层的双向hidden状态并拼接
    hidden_forward = hidden[-2, :, :]  # 最后一层正向RNN的最终状态
    hidden_backward = hidden[-1, :, :] # 最后一层反向RNN的最终状态
    out_reduced = torch.cat([hidden_forward, hidden_backward], dim=1)
    
    return self.fc(out_reduced)

二、损失与准确率停滞的核心原因及修复方案

你的模型准确率接近4分类的随机猜测准确率(25%),说明模型完全没有学到有效特征,以下是必须优先修复的问题:

1. Padding索引设置错误

你把Embedding层的padding_index设为了<unk>的索引,这会导致RNN错误地处理padding token,学习到无效的padding信息。正确的padding_index应该对应**<pad>**的索引:

# 修改__init__中的参数
padding_index = vocab['<pad>']  # 替换为你的padding token对应的索引

2. 标签与模型输出的维度/范围问题

  • 标签范围错误:CrossEntropyLoss要求标签是0到n_classes-1的整数(你的n_classes=4,即标签应为0、1、2、3)。如果你的数据集标签是1-4,模型会因无法找到类别4而始终输出随机结果,准确率接近25%。请检查标签预处理步骤,确保标签从0开始编码。
  • 多余的维度压缩:你的代码中对preds执行了.squeeze(1),但模型输出是(batch_size, 4),该操作完全多余,甚至可能在batch_size=1时导致维度不匹配,直接删除即可:
preds = model(inputs, leng)  # 去掉.squeeze(1)

3. 学习率与优化器配置

如果使用SGD作为优化器,默认学习率(0.01)可能过低,无法有效更新参数;如果使用Adam,可尝试调整学习率至0.001或0.0001。示例优化器初始化:

optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

4. 其他辅助检查

  • 验证数据加载的维度:确保data的维度是(sequence_length, batch_size),符合Embedding层的输入要求;lens是每个序列的有效长度,且为CPU张量(你当前的lens.cpu()是正确的)。
  • 尝试使用预训练词向量(如GloVe)初始化Embedding层,观察模型是否能快速收敛,排除随机初始化导致的收敛缓慢问题。
  • 打印模型输出的preds分布,查看是否所有样本的预测都集中在某一类,或者分布完全均匀,这能快速定位问题根源。

内容的提问来源于stack exchange,提问作者TheHumanSpider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:36:08