Как использовать результат встраивания с mask_zero=True в керасе
В керасе я хочу вычислить среднее значение ненулевого вложения. Интересно, в чем разница между mask_zero=True или False в Embedded Layer. Я попробовал код ниже:
input_data = Input(shape=(5,), dtype='int32', name='input')
embedding_layer = Embedding(1000, 24, input_length=5,mask_zero=True,name='embedding')
out = word_embedding_layer(input_data)
def antirectifier(x):
x = K.mean(x, axis=1, keepdims=True)
return x
def antirectifier_output_shape(input_shape):
shape = list(input_shape)
return tuple(shape)
out = Lambda(antirectifier, output_shape=antirectifier_output_shape,name='lambda')(out)
Но кажется, что результат является средним значением всех элементов, как я могу просто рассчитать среднее значение всех ненулевых входных данных?
1 ответ
Из документа функции:
Если это правда, то все последующие слои в модели должны поддерживать маскирование
Ваша лямбда-функция не поддерживает маскирование. Например, повторяющиеся слои в Keras поддерживают маскирование. Если вы установите mask_zero=True
в ваших вложениях все 0 индексов, которые вы передаете в слой внедрения, будут распространяться как "замаскированные", и следующие слои, способные понимать "замаскированную" информацию, будут использовать их.
По сути, если вы создаете "средний" слой, который захватывает маску и вычисляет среднее значение только для немаскированных значений, то вы получите желаемые результаты.
Вы можете найти здесь способ создания ваших лямбда-слоев, которые поддерживают маскирование
Я надеюсь, что это помогает.