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

使用tf.keras构建RNN文本生成模型时准确率异常偏高的问题排查

问题诊断与修复建议

1. 输入输出序列长度不匹配的逻辑错误

你的模型输出形状为(None, 149, 1712),但目标序列Y的形状是(113, 148, 1712),两者时间步长度不一致:

  • 模型接收149步的输入,返回149步的输出;
  • 目标Y是输入右移一位后的结果,长度为148步。

这种不匹配会导致训练逻辑混乱:要么TensorFlow自动截断模型输出的最后一步强行匹配Y,要么数据准备阶段的序列对齐完全错误。正确的文本生成训练逻辑应该是:

  • 输入序列X取原文本的前T-1步(148步),形状(113,148,1712);
  • 目标序列Y取原文本的后T-1步(148步),形状(113,148,1712);
  • 模型输入输出均为148步,确保每个输入时间步t对应目标时间步t的下一个token。

2. 样本量过小引发的极端过拟合

训练数据仅113条文本,总token数不足1.7万,但模型参数多达26万,远超过训练数据的信息量。首轮训练准确率就达到0.99,本质是模型直接“记住”了所有训练样本的每个位置的token,而非学习到文本的语义或语法规律。这类模型在新数据上的表现会极差,完全不具备文本生成能力。

3. 模型结构与训练目标的适配问题

文本生成任务中,one-hot编码输入通常需要配合**教师强制(Teacher Forcing)**训练,但你的代码未体现相关配置。另外,LSTM隐藏层维度仅为30,对于1712的词汇表来说容量不足,但样本量过小反而掩盖了这个问题,让模型直接记忆数据而非学习规律。

修复步骤

  • 修正序列对齐:调整DataPrepare函数,让输入X和目标Y的时间步长度一致(均为148步),手动验证几条样本的X与Y是否为连续的前后token关系;
  • 扩充训练数据:尽可能增加训练文本数量(至少数千条),让模型能学习到通用的文本规律;
  • 抑制过拟合:加入tf.keras.layers.Dropout(0.2)层,使用更小的学习率(如1e-4),或改用Embedding层替代one-hot编码,降低输入维度;
  • 调整模型结构:可适当增大LSTM隐藏层维度(如64或128),提升模型的特征学习能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:30:47