我正在为我在 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]
在其他项目中,我通常将序列的前端作为各种博客、课程作业和其他示例印在我身上的惯例。
我的问题:是否有任何研究表明您填充序列的哪一侧是否重要?还是我完全想多了?
任何建议将不胜感激。
我正在为我在 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]
在其他项目中,我通常将序列的前端作为各种博客、课程作业和其他示例印在我身上的惯例。
我的问题:是否有任何研究表明您填充序列的哪一侧是否重要?还是我完全想多了?
任何建议将不胜感激。
当填充值被视为实际值时,它们是噪声。例如,填充温度序列[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
是不应与实际值重叠的填充值。