Fun*_*nzo 6 nlp machine-learning lstm keras rnn
我面临以下问题。我有大量文档要使用双向 LSTM 进行编码。每个文档都有不同数量的单词,单词可以被认为是一个时间步长。
在配置双向 LSTM 时,我们需要提供时间序列长度。当我训练模型时,每个批次的这个值都会不同。我应该为timeseries_size我允许的最大文档大小选择一个数字吗?任何大于这个的文件都不会被编码?
示例配置:
Bidirectional(LSTM(128, return_sequences=True), input_shape=(timeseries_size, encoding_size))
Run Code Online (Sandbox Code Playgroud)
这是一个众所周知的问题,涉及普通 RNN 和双向 RNN。GitHub 上的讨论可能会对您有所帮助。本质上,以下是最常见的选项:
一个简单的解决方案是将 设定timeseries_size为训练集的最大长度,并用零填充较短的序列。Keras 代码示例。如果训练集恰好同时具有非常长和非常短的输入,那么一个明显的缺点是内存浪费。
将输入样本分成不同长度的桶,例如,一个桶为length <= 16,另一个桶为length <= 32,等等。基本上,这意味着为不同的句子集训练几个单独的 LSTM。这种方法(称为分桶)需要更多的努力,但目前被认为是最有效的,并且实际上用于最先进的翻译引擎Tensorflow 神经机器翻译。
| 归档时间: |
|
| 查看次数: |
3671 次 |
| 最近记录: |