【问题标题】:Keras - Mask Zero padding in Embedding layerKeras - 嵌入层中的掩码零填充
【发布时间】:2018-08-12 14:27:21
【问题描述】:

目标是将每个索引转换为嵌入向量,然后将所有向量平均为一个向量。 我必须忽略填充的零!

平均后的向量应该被转移到下一层。

这是我的代码:

from keras.layers import Embedding,Input,AveragePooling1D
from keras.models import Model
from keras.preprocessing.text import Tokenizer as Keras_Tokenizer
from keras.preprocessing.sequence import pad_sequences
import numpy as np


embedding_size = 4
vocab_size = 9 + 1
max_sequence_length = 5 


my_input = Input(shape=(max_sequence_length,), name='input')
embedding_layer = Embedding(output_dim=embedding_size, input_dim=vocab_size,input_length=1, mask_zero=True,name='my_embedding')
embedding = embedding_layer(my_input)



avg=AveragePooling1D(pool_size=max_sequence_length)(embedding)#Calc average off all embedding vectors
model = Model(inputs= [my_input], outputs=avg)
model.get_weights() 



aa = np.array([[0,0,2,4]])#sanity checks
model.predict(aa)[0][0] 

得到这个错误:

TypeError: Layer average_pooling1d_1 does not support masking, but was passed an input_mask: Tensor("my_embedding_9/NotEqual:0", shape=(?, 5), dtype=bool)

有人可以帮忙吗?

【问题讨论】:

  • 切换到 Average 因为您的池大小与序列长度相同。 Average 应该支持屏蔽。
  • Average 将张量列表作为输入,这不适合当前情况(请参阅here)。这是一个merge 层。我们正在寻找的是支持屏蔽的GlobalAveragePooling1D

标签: python keras embedding


【解决方案1】:

您的用例与one 密切相关。

它将让您编写一个自定义层以支持 GlobalAveragePooling1DAveragePooling1D 中的屏蔽。

【讨论】:

    猜你喜欢
    • 2019-11-09
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 2016-09-12
    • 2020-10-05
    • 2020-08-24
    相关资源
    最近更新 更多