首页 > 解决方案 > 如何在 keras 中使用带有 Convolution1D 层的遮罩?

问题描述

我正在尝试执行情感分类任务,我正在使用基于注意力的架构,该架构同时具有卷积层和 BiLSTM 层。我的模型的第一层是一个嵌入层,然后是一个 Convolution1D 层。我已经使用mask_zero=True了嵌入层,因为我已经用零填充了序列。然而,这会为 Convolution1D 层创建一个错误,因为该层不支持遮罩。但是,我确实需要屏蔽零输入,因为我在卷积层之后有 LSTM 层。有没有人对此有任何解决方案。我已将我的模型的示例代码附加到 Convolution1D 层以供参考。

wordsInputs = Input(shape=(maxSeq,), name='words_input')
embed_reg = l2(l=0.001)
emb = Embedding(vocabSize, 300, mask_zero=True, init='glorot_uniform', W_regularizer=embed_reg)(wordsInputs)
convOutput = Convolution1D(nb_filter=100, filter_length=3, activation='relu', border_mode='same')(emb)

标签: kerasdeep-learningnlpconvolutionword-embedding

解决方案


看起来您已经定义了一个 maxSeq 长度,并且您说您正在用零填充序列。mask_zero 意味着别的东西,特别是零是一个保留的输入字索引,您不应该使用它,它是为程序内部保留的,以标记可变长度序列的结束。

我认为解决方案是简单地删除参数mask_zero=True,因为它是不需要的(因为它用于可变长度序列),并使用零作为填充词索引。


推荐阅读