如何将掩码值输入到Convolution1D层

时间:2017-04-13 12:44:27

标签: keras convolution masking

我需要将可变长度序列提供给我的模型。

我的模型是Embedding + LSTM + Conv1d + Maxpooling + softmax

当我在mask_zero = True中设置Embedding时,我无法在Conv1d进行编译。

如何在Conv1d中输入掩码值或是否有其他解决方案?

2 个答案:

答案 0 :(得分:4)

Conv1D层目前不支持屏蔽。这是keras repo上的open issue

根据任务的不同,您可以轻松嵌入mask_value,就像序列中的其他值一样,并应用全局池(正如您现在所做的那样)。

答案 1 :(得分:1)

Masking层希望每个下游层都支持屏蔽,而Conv1D层则不是这样。幸运的是,还有另一种使用函数式API进行屏蔽的方法:

inputs = Input(...)
mask = Masking().compute_mask(inputs) # <= Compute the mask
embed = Embedding(...)(inputs)
lstm = LSTM(...)(embed, mask=mask) # <= Apply the mask
conv = Conv1D(...)(lstm)
...
model = Model(inputs=[inputs], outputs=[...])