如何解决在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时,由
Embedding
或Masking
层生成的掩码将通过网络传播到能够使用它们的任何层(例如RNN)层)。 Keras将自动获取与输入相对应的遮罩,并将其传递给知道如何使用该遮罩的任何层。
在嵌入层documentation中,参数mask_zero
mask_zero
:布尔值,无论输入值0是否为应屏蔽掉的特殊“填充”值。当使用可能需要可变长度输入的循环图层时,这很有用。 如果为True,则模型中的所有后续层都需要支持屏蔽,否则将引发异常。结果,如果mask_zero
设置为True,则无法在词汇表中使用索引0(input_dim应等于词汇表大小+ 1)
现在,当我运行模型时,我没有例外,我也能够使用数据进行训练。这是否意味着GlobalAveragePooling1D,Subtract,abs和Dense都支持屏蔽并在传递数据时将其考虑在内?
在第二种情况下,如果我在Lambda
层之后立即使用自定义Embedding
层,该如何将其引入屏蔽呢?
更多一般性问题:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。