Я работаю над моделью на основе этой бумаги и получаю исключение из-за того, что слой GlobalMaxPooling1D
не поддерживает маскирование.
У меня есть слой Embedding
с аргументом mask_zero
, установленным на True
. Однако, поскольку последующий слой GlobalMaxPooling1D
не поддерживает маскирование, я получаю исключение. Ожидается исключение, поскольку в документации фактически указано, что любые последующие слои после слоя Embedding
с mask_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])