微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在GlobalAveragePooling1D和其他层中嵌入层之后进行掩膜

如何解决在GlobalAveragePooling1D和其他层中嵌入层之后进行掩膜

我正在构建一个模型,该模型在运行时不应考虑填充的零。我知道Embedding层通过mask_zero参数支持屏蔽。我希望随后的图层也忽略填充的零。

embedding = Embedding(vocab_size,b,input_length=max_length,mask_zero=True)

inp1 = Input(shape=(c.shape[0],))
inp2 = Input(shape=(c.shape[0],))

w_embedding_1 = embeddding(inp1)
w_embedding_2 = embeddding(inp2)

c_embedding_1 = GlobalAveragePooling1D()(w_embeddings_1)
c_embedding_2 = GlobalAveragePooling1D()(w_embeddings_2)

out = Subtract()([c_embeddings_1,c_embeddings_2])
out = abs(out)

out = Dense(r,activation='sigmoid')(out)

根据文档here

使用功能性API或顺序性API时,由EmbeddingMasking生成的掩码将通过网络传播到能够使用它们的任何层(例如RNN)层)。 Keras将自动获取与输入相对应的遮罩,并将其传递给知道如何使用该遮罩的任何层

在嵌入层documentation中,参数mask_zero

mask_zero:布尔值,无论输入值0是否为应屏蔽掉的特殊“填充”值。当使用可能需要可变长度输入的循环图层时,这很有用。 如果为True,则模型中的所有后续层都需要支持屏蔽,否则将引发异常。结果,如果mask_zero设置为True,则无法在词汇表中使用索引0(input_dim应等于词汇表大小+ 1)

现在,当我运行模型时,我没有例外,我也能够使用数据进行训练。这是否意味着GlobalAveragePooling1D,Subtract,abs和Dense都支持屏蔽并在传递数据时将其考虑在内?

在第二种情况下,如果我在Lambda层之后立即使用自定义Embedding层,该如何将其引入屏蔽呢?

embedding = Embedding(vocab_size,))

w_embedding_1 = embeddding(inp1)

def custom_layer(tensor):
    return tf.math.reduce_sum(tensor,axis=1,keepdims=True)

lambda_layer_1 = Lambda(custom_layer)(w_embedding_1)

更多一般性问题:

  1. 如何检查Keras中的现有图层是否支持前一层的蒙版吸收?
  2. 检查掩盖和未掩盖案例输出的好方法是什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。