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

PyTorch中nn.LSTM无法学习/参数不更新问题求助

问题分析与解决方案

损失卡在0.6969左右,说明模型输出始终接近0.5(对应二分类的随机猜测),结合你提到基础MLP能正常训练,问题大概率出在LSTM模块的序列处理逻辑上,以下是针对性的解决思路:

1. 核心问题:未处理padding序列的有效长度

你的输入是经过0填充的等长序列,但直接取output[:,-1,:]或默认使用final_hidden_state时,会包含padding部分的无效信息——很多序列的真实长度远小于批量最大长度,最后一个位置是填充的0,对应的LSTM输出没有有效语义,导致线性层无法学到有用特征。

解决方法:传入序列真实长度,用pack_padded_sequence处理变长序列
修改模型的forward方法,新增序列长度参数,让LSTM只处理有效序列部分:

import torch
import torch.nn as nn

class SimpleLSTM(nn.Module):
    def __init__(self, vocab_size, embedding_dim, hidden_dim):
        super().__init__()
        
        self.embedding = nn.Embedding(vocab_size, embedding_dim, padding_idx=0)
        self.lstm = nn.LSTM(batch_first=True, input_size=embedding_dim, num_layers=1, hidden_size=hidden_dim, bidirectional=True)
        self.linear = nn.Linear(hidden_dim*2, 1)
        # 移除单独的Sigmoid,后续用BCEWithLogitsLoss提升稳定性
        
    def forward(self, x, lengths):  # lengths: 形状(N,),存储每个序列的真实有效长度
        x = self.embedding(x)
        # 打包序列,跳过padding部分
        packed_x = nn.utils.rnn.pack_padded_sequence(x, lengths, batch_first=True, enforce_sorted=False)
        _, (final_hidden_state, _) = self.lstm(packed_x)
        # 拼接双向LSTM的两个方向最后隐藏状态
        final_hidden = torch.cat([final_hidden_state[0], final_hidden_state[1]], dim=1)
        x = self.linear(final_hidden)
        return x  # 输出logits,后续用BCEWithLogitsLoss计算损失

训练时需要传入每个序列的真实长度(比如从数据预处理阶段获取),损失函数替换为:

criterion = nn.BCEWithLogitsLoss()

2. 辅助优化:LSTM权重初始化与学习率调整

  • 手动初始化LSTM权重:PyTorch默认的LSTM权重初始化可能不够合理,手动初始化可以提升收敛速度:
    在模型的__init__方法中添加:
    # 初始化LSTM的权重和偏置
    for name, param in self.lstm.named_parameters():
        if 'weight' in name:
            nn.init.xavier_uniform_(param)
        elif 'bias' in name:
            nn.init.zeros_(param)
    
  • 调整学习率:LSTM对学习率更敏感,如果你用的是Adam,可以把学习率从常规的1e-3降到1e-4或5e-4试试。

3. 验证逻辑:确认数据输入正确性

检查传入LSTM的序列是否正确,比如:

  • 确认padding_idx=0的设置和数据中的填充值一致;
  • 确认序列长度参数lengths的数值是正确的(比如没有把填充后的长度当成真实长度)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:25:21