我需要将可变长度序列提供给我的模型。
我的模型是Embedding + LSTM + Conv1d + Maxpooling + softmax
。
当我在mask_zero = True
中设置Embedding
时,我无法在Conv1d
进行编译。
如何在Conv1d
中输入掩码值或是否有其他解决方案?
答案 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=[...])