如何在keras中使用mask_zero = True嵌入的结果

时间:2018-04-22 01:20:08

标签: keras embedding masking

在keras中,我想计算非零嵌入输出的平均值。 我想知道嵌入层中mask_zero = True或False有什么区别。 我尝试了下面的代码:

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 个答案:

答案 0 :(得分:0)

来自function's doc

  

如果这是True,那么模型中的所有后续层都需要   支持掩蔽

您的lambda函数不支持屏蔽。例如,Keras中的Recurrent层支持屏蔽。如果在嵌入中设置mask_zero=True,那么您提供给嵌入图层的所有0索引都将作为“屏蔽”传播,并且能够理解“屏蔽”信息的以下图层将使用它们。

基本上,如果您构建一个“平均”图层来抓取蒙版并仅计算非蒙版值的平均值,那么您将获得所需的结果。

您可以find here构建支持遮罩的lambda图层

我希望它有所帮助。