LSTM 训练不同长度的序列

数据挖掘 Python 喀拉斯 lstm
2022-02-13 18:16:03

所以我有大约 600 个类和 17k 个句子用于文本分类。特征向量是使用 word2vec 训练的。

矢量尺寸 = 100 ; LSTM 隐藏单元 = 100

我正在使用类权重来解决不平衡问题。我想知道当最大长度保持为 18 但句子的最小长度为 1 时,LSTM 是否受到训练数据稀疏性的影响。

而且,我们如何使用 keras train_on_batch 为可变长度而不是填充创建 5、10、25 的批次。

1个回答

不同长度序列的解决方案是:

1-填充,但你不想。

2-截断序列,因此,如果您有例如 3 个不同长度的序列,则截断这些序列,使它们具有最短序列的所有长度。

3-使用时间步长 1,但在这种情况下,您的模型将不会学习不同时间步长之间的依赖关系

4- 使用批量大小 = 1 的在线学习。

对于第四个解决方案,这是在 keras 中创建随机时间长度批次的训练数据的示例:在 Keras 中使用不同长度的示例训练 RNN因此,您可以拥有不同长度的不同批次,并且由于您使用 batch_size = 1 的在线学习,这可能是一个很好的解决方案。第四种解决方案也有优点和缺点。对于在线学习,训练速度较慢,但​​通常与批量大小 > 1 的 sgd 相比,您需要更少的 epoch 才能获得良好的模型。如果您使用有状态的 lstm,这可能会导致您的模型不稳定,但并非总是如此,但可能会发生。