You need to enable JavaScript to run this app. PyTorch双向LSTM新闻标题情感分析损失停滞嵌入层问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch双向LSTM新闻标题情感分析损失停滞嵌入层问题咨询

问题诊断与解决方案

核心问题定位

你遇到的训练损失停滞问题完全是由嵌入层的错误处理逻辑导致的,具体问题如下:

  • PyTorch的nn.Embedding层设计为直接接收词索引整数张量作为输入,不需要提前做独热编码。输入形状为(批次大小, 序列长度)时,输出自动为(批次大小, 序列长度, 嵌入维度),刚好符合你预期的(10, 30, 100)形状。
  • 你给嵌入层传入了形状为(10, 30, 5745)的独热编码张量,嵌入层会把最后一维的5745个值全部当成词索引查表,所以输出才会多出一维变成(10, 30, 5745, 100),这个输出本身就不具备正确的语义特征。
  • 后续添加的torch.max(embeddings, dim=2)逻辑完全错误:独热编码只有一个位置为1,其余为0,相当于你查了5745个词的嵌入向量后取最大值,最终得到的张量根本不是对应位置词的正确嵌入。模型拿错误特征训练自然无法收敛,损失长期维持在0.6-0.7刚好是二分类随机猜测的损失水平(ln2≈0.693),和问题表现完全吻合。

修复步骤

  1. 删除训练代码中独热编码的调用行,即删掉x = one_hot_encode(x, vocab),one_hot_encode函数整个可以废弃。
  2. 删除模型forward方法中如下两行错误代码:
embeddings = torch.max(embeddings, dim=2)
embeddings = embeddings[0].type(torch.cuda.FloatTensor)
  1. 直接把batches输出的形状为(10, 30)的词索引张量,转成torch张量后移到CUDA设备,直接喂入模型即可,此时嵌入层输出会自动为你需要的(10, 30, 100)形状。

修改完成后可以在forward中打印embeddings.shape确认输出符合预期,重新训练后损失会正常下降。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 17:27:02