【发布时间】:2020-02-14 20:17:10
【问题描述】:
在使用 Keras 子类化 API 时,从 Tensorflow 文档中,他们给出了这个示例,说明如何将掩码传递给实现掩码的其他层。我想知道这是否是明确要求的,或者在嵌入层具有 mask_zero=True 之后是否正确处理。
class MyLayer(layers.Layer):
def __init__(self, **kwargs):
super(MyLayer, self).__init__(**kwargs)
self.embedding = layers.Embedding(input_dim=5000, output_dim=16, mask_zero=True)
self.lstm = layers.LSTM(32)
def call(self, inputs):
x = self.embedding(inputs)
# Note that you could also prepare a `mask` tensor manually.
# It only needs to be a boolean tensor
# with the right shape, i.e. (batch_size, timesteps).
mask = self.embedding.compute_mask(inputs)
output = self.lstm(x, mask=mask) # The layer will ignore the masked values
return output
layer = MyLayer()
x = np.random.random((32, 10)) * 100
x = x.astype('int32')
layer(x)
我的困惑来自文档的另一个领域:
屏蔽
该层支持对可变数量的输入数据进行屏蔽 时间步长。要将掩码引入数据,请使用嵌入层 将 mask_zero 参数设置为 True。
这似乎意味着如果 mask_zero=True 则不需要在后续层上执行进一步的命令。
【问题讨论】:
标签: tensorflow keras masking