我需要将可变长度的序列输入到我的模型中。
我的模型是 嵌入层 + LSTM层 + 一维卷积层(Conv1d) + 最大池化层 + softmax层
。
当我在 嵌入层(Embedding)
中设置 mask_zero = True
时,我无法通过 一维卷积层(Conv1d)
的编译。
如何在 一维卷积层(Conv1d)
中输入掩码值,或者是否有其他解决方案?
我需要将可变长度的序列输入到我的模型中。
我的模型是 嵌入层 + LSTM层 + 一维卷积层(Conv1d) + 最大池化层 + softmax层
。
当我在 嵌入层(Embedding)
中设置 mask_zero = True
时,我无法通过 一维卷积层(Conv1d)
的编译。
如何在 一维卷积层(Conv1d)
中输入掩码值,或者是否有其他解决方案?
Masking
层期望每个下游层都支持掩码,但Conv1D
层并不是这种情况。幸运的是,还有另一种使用Functional 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=[...])
目前Conv1D层不支持掩码。Keras的存储库中有一个未解决问题。
根据任务的不同,您可能可以像序列中的其他值一样嵌入mask_value
并应用全局池化(就像您现在正在做的那样)。