Keras Masking层没有正确屏蔽嵌入输出。下面是我的代码示例-
--输入数据
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条答案
按热度按时间qfe3c7zg1#
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, **mask_zero=True**)
或
unmasked_embedding = tf.cast( tf.tile(tf.expand_dims(padded_inputs, axis=-1), [1, 1, 10]), tf.float32 )