在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)
但似乎结果是所有元素的平均值,我怎样才能计算所有非零输入的平均值?
答案 0 :(得分:0)
如果这是True,那么模型中的所有后续层都需要 支持掩蔽
您的lambda函数不支持屏蔽。例如,Keras中的Recurrent层支持屏蔽。如果在嵌入中设置mask_zero=True
,那么您提供给嵌入图层的所有0索引都将作为“屏蔽”传播,并且能够理解“屏蔽”信息的以下图层将使用它们。
基本上,如果您构建一个“平均”图层来抓取蒙版并仅计算非蒙版值的平均值,那么您将获得所需的结果。
您可以find here构建支持遮罩的lambda图层
我希望它有所帮助。