神经序列模型 (RNN) 的填充序列

数据挖掘 神经网络 rnn
2021-09-17 10:45:36

我正在为我在 Keras 中构建的基于 GRU 的分类器填充序列。我想知道是否有任何公认的最佳实践来填充序列的前导或尾随。

例如

sequence = [1,2,3,4]
leading_pad = [0,0,0,1,2,3,4]
trailing_pad = [1,2,3,4,0,0,0]

在其他项目中,我通常将序列的前端作为各种博客、课程作业和其他示例印在我身上的惯例。

我的问题:是否有任何研究表明您填充序列的哪一侧是否重要?还是我完全想多了?

任何建议将不胜感激。

1个回答

当填充值被视为实际值时,它们是噪声。例如,填充温度序列[20, 21, 23, 0, 0]与传感器未能报告最后两个读数的正确温度的噪声序列相同。因此,如果可能,最好清除(忽略)填充值。

最佳实践是Mask在其他层(例如 LSTM、RNN 等)之前使用一层来屏蔽(忽略)填充值。这样,我们将它们放在第一位还是最后都没有关系。

查看这篇文章(我的回答),它展示了如何填充和屏蔽不同长度的序列(使用示例代码)。您可以对代码进行试验,以查看移除掩码(将填充值视为实际值)对模型性能恶化的影响。

这是用于快速参考的python片段:

model.add(Masking(mask_value=special_value, input_shape=(max_seq_len, dimension)))
model.add(LSTM(lstm_units))

其中special_value是不应与实际值重叠的填充值。