Keras遮罩层似乎无法正常工作

时间:2020-05-24 20:49:33

标签: keras keras-layer masking

Keras遮罩层未正确遮罩嵌入输出。这是我的代码示例-

-输入数据

    raw_inputs = [
        [711, 632, 71],
        [73, 8, 3215, 55, 927],
        [83, 91, 1, 645, 1253, 927],
    ]
    padded_inputs = tf.keras.preprocessing.sequence.pad_sequences(
        raw_inputs, padding="post"
    )
    print(padded_inputs)
[[ 711  632   71    0    0    0]
 [  73    8 3215   55  927    0]
 [  83   91    1  645 1253  927]]

-填充代码

    from tensorflow.python.keras import layers
    embedding = layers.Embedding(input_dim=5000, output_dim=16)
    masked_output = embedding(padded_inputs)

    masking_layer = layers.Masking(mask_value=0.0)

    masked_embedding = masking_layer(masked_output)

    print(masked_embedding._keras_mask)

我得到以下输出-

tf.Tensor(
[[ True  True  True  True  True  True]
 [ True  True  True  True  True  True]
 [ True  True  True  True  True  True]], shape=(3, 6), dtype=bool)

有人知道为什么掩膜无法正确进行吗?所有值为0的值都应被屏蔽为False。

1 个答案:

答案 0 :(得分:0)

padded_inputs 已经转换为 masked_output 并嵌入到您的代码中,并且其中的 0 丢失了。查看 https://keras.io/api/layers/core_layers/masking/ 了解更多信息。你也可以打印你的masked_output,你会看到0不存在。

在 tensorflow 提供的原始示例中,您应该使用 embedding = layers.Embedding(input_dim=5000, output_dim=16, ma​​sk_zero=True)

unmasked_embedding = tf.cast( tf.tile(tf.expand_dims(padded_inputs, axis=-1), [1, 1, 10]), tf.float32 )