gpt4 book ai didi

python - 如何在自定义 tf.keras.layers.Layer 中支持 mask

转载 作者:行者123 更新时间:2023-11-28 18:02:33 31 4
gpt4 key购买 nike

我正在实现一个需要支持 mask 的自定义 tf.keras.layers.Layer

考虑以下场景

embedded = tf.keras.layer.Embedding(input_dim=vocab_size + 1, 
output_dim=n_dims,
mask_zero=True)
x = MyCustomKerasLayers(embedded)

现在根据文档

mask_zero: Whether or not the input value 0 is a special "padding" value that should be masked out. This is useful when using recurrent layers which may take variable length input. If this is True then all subsequent layers in the model need to support masking or an exception will be raised. If mask_zero is set to True, as a consequence, index 0 cannot be used in the vocabulary (input_dim should equal size of vocabulary + 1).

请问这是什么意思?翻看TensorFlow's custom layers guidetf.keras.layer.Layer文档尚不清楚应该做什么来支持屏蔽

  1. 如何支持屏蔽?

  2. 如何从过去的图层访问 mask ?

  3. 假设输入 (batch, time, channels) 或 `(batch, time) 掩码看起来会有所不同吗?它们会是什么形状?

  4. 如何将它传递到下一层?

最佳答案

  1. 要支持掩码,应在自定义层内实现 compute_mask 方法

  2. 要访问掩码,只需在 call 方法中添加参数 mask 作为第二个位置参数,它就可以访问(例如 call(self, inputs, mask=None))

  3. 这个猜不出来,是layer负责计算mask之前

  4. 一旦您实现了 compute_mask,就会自动将掩码传递到下一层 - 不包括模型子类化的情况,在这种情况下,由您来计算掩码并传递它们上。

例子:

class MyCustomKerasLayers(tf.keras.layers.Layer):
def __init__(self, .......):
...

def compute_mask(self, inputs, mask=None):
# Just pass the received mask from previous layer, to the next layer or
# manipulate it if this layer changes the shape of the input
return mask

def call(self, input, mask=None):
# using 'mask' you can access the mask passed from the previous layer

注意这个例子只是传递了掩码,如果图层输出的形状与接收到的形状不同,你应该在 compute_mask 中相应地改变掩码以传递正确的形状

编辑

现在解释也包含在 tf.keras masking and padding documentation 中.

关于python - 如何在自定义 tf.keras.layers.Layer 中支持 mask ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55176818/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com