所以我有大约 600 个类和 17k 个句子用于文本分类。特征向量是使用 word2vec 训练的。
矢量尺寸 = 100 ; LSTM 隐藏单元 = 100
我正在使用类权重来解决不平衡问题。我想知道当最大长度保持为 18 但句子的最小长度为 1 时,LSTM 是否受到训练数据稀疏性的影响。
而且,我们如何使用 keras train_on_batch 为可变长度而不是填充创建 5、10、25 的批次。
所以我有大约 600 个类和 17k 个句子用于文本分类。特征向量是使用 word2vec 训练的。
矢量尺寸 = 100 ; LSTM 隐藏单元 = 100
我正在使用类权重来解决不平衡问题。我想知道当最大长度保持为 18 但句子的最小长度为 1 时,LSTM 是否受到训练数据稀疏性的影响。
而且,我们如何使用 keras train_on_batch 为可变长度而不是填充创建 5、10、25 的批次。
不同长度序列的解决方案是:
1-填充,但你不想。
2-截断序列,因此,如果您有例如 3 个不同长度的序列,则截断这些序列,使它们具有最短序列的所有长度。
3-使用时间步长 1,但在这种情况下,您的模型将不会学习不同时间步长之间的依赖关系
4- 使用批量大小 = 1 的在线学习。
对于第四个解决方案,这是在 keras 中创建随机时间长度批次的训练数据的示例:在 Keras 中使用不同长度的示例训练 RNN。因此,您可以拥有不同长度的不同批次,并且由于您使用 batch_size = 1 的在线学习,这可能是一个很好的解决方案。第四种解决方案也有优点和缺点。对于在线学习,训练速度较慢,但通常与批量大小 > 1 的 sgd 相比,您需要更少的 epoch 才能获得良好的模型。如果您使用有状态的 lstm,这可能会导致您的模型不稳定,但并非总是如此,但可能会发生。