machine-learning - 如何在 Keras 中配置双向 LSTM 的输入形状

标签 machine-learning nlp keras lstm recurrent-neural-network

我面临以下问题。 我有大量文档想要使用双向 LSTM 进行编码。每个文档都有不同数量的单词,单词可以被认为是一个时间步长。

在配置双向 LSTM 时,我们需要提供时间序列长度。 当我训练模型时,每个批处理的该值都会不同。 我应该为 timeseries_size 选择一个数字,这是我允许的最大文档大小吗?任何大于此的文档都不会被编码?

示例配置:

Bidirectional(LSTM(128, return_sequences=True), input_shape=(timeseries_size, encoding_size))

最佳答案

这是一个众所周知的问题,涉及普通 RNN 和双向 RNN。 This discussion on GitHub可能对你有帮助。本质上,以下是最常见的选项:

  • 一个简单的解决方案是设置 timeseries_size作为训练集的最大长度,并用零填充较短的序列。 Example Keras code 。如果训练集恰好同时具有非常长和非常短的输入,那么一个明显的缺点是内存浪费。

  • 将输入样本分成不同长度的桶,例如一个桶length <= 16 ,另一个桶 length <= 32等等。基本上,这意味着为不同的句子集训练几个单独的 LSTM。这种方法(称为分桶)需要更多的努力,但目前被认为是最有效的,并且实际用于最先进的翻译引擎 Tensorflow Neural Machine Translation .

关于machine-learning - 如何在 Keras 中配置双向 LSTM 的输入形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49834096/

相关文章:

python - `layer.get_weights()` 返回什么?

在 R 中从 Weka 的决策树运行统计测试

python-3.x - 使用 Spacy 进行命名实体识别的交叉验证

algorithm - 为词性标注创建特征函数

python - 如何在 scikit-learn 的 MultinomialNB Pipeline 训练模型中提取单词特征?

tensorflow - 多头注意层 - Keras 中的包装多头层是什么?

python - 如何在运行时更改处理单元(从GPU到CPU)?

Python - tf-idf 预测新文档的相似度

python-3.x - 提取每个簇的顶部单词

algorithm - 我们如何在此类数据上使用机器学习算法?