我正在基于this纸的模型上工作,由于GlobalMaxPooling1D图层不支持遮罩,因此我遇到了异常。

我有一个Embedding图层,其中mask_zero参数设置为True。但是,由于随后的GlobalMaxPooling1D层不支持遮罩,因此出现了异常。可以预料到会有例外,因为实际上在the documentation of the Embedding layer中指出,具有Embeddingmask_zero = True层之后的任何后续层都应支持屏蔽。

但是,由于我正在处理其中的单词数目可变的句子,因此确实需要Embedding层中的遮罩。 (即由于输入长度的变化)我的问题是,我应该如何更改我的模型以使掩膜仍然是模型的一部分,并且不会在GlobalMaxPooling1D层上引起问题?

下面是该模型的代码。

model = Sequential()
embedding_layer = Embedding(dictionary_size, num_word_dimensions,
                            weights=[embedding_weights], mask_zero=True,
                            embeddings_regularizer=regularizers.l2(0.0001))
model.add(TimeDistributed(embedding_layer,
                          input_shape=(max_conversation_length, timesteps)))

model.add(TimeDistributed(Bidirectional(LSTM(m // 2, return_sequences=True,
                                             kernel_regularizer=regularizers.l2(0.0001)))))
model.add(TimeDistributed(Dropout(0.2)))
model.add(TimeDistributed(GlobalMaxPooling1D()))
model.add(Bidirectional(LSTM(h // 2, return_sequences = True,
                             kernel_regularizer=regularizers.l2(0.0001)),
                        merge_mode='concat'))
model.add(Dropout(0.2))
crf = CRF(num_tags, sparse_target=False, kernel_regularizer=regularizers.l2(0.0001))
model.add(crf)
model.compile(optimizer, loss = crf.loss_function, metrics=[crf.accuracy])

最佳答案

但是,由于我正在处理其中的单词数量不固定的句子,因此我确实需要在嵌入层中使用遮罩。


您是否在填充句子以使其长度相等?如果是这样,则可以让模型自行发现0,而不是进行屏蔽,因此应忽略该值。因此,您将不需要显式屏蔽。此方法也用于处理此answer中建议的数据中的缺失值。

关于python - keras-嵌入层mask_zero导致后续层异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55716755/

10-13 03:25