blu*_*ers 6 python keras tensorflow
我正在实现一个tf.keras.layers.Layer需要支持屏蔽的自定义。
考虑以下场景
embedded = tf.keras.layer.Embedding(input_dim=vocab_size + 1,
output_dim=n_dims,
mask_zero=True)
x = MyCustomKerasLayers(embedded)
Run Code Online (Sandbox Code Playgroud)
现在根据文档
mask_zero: 输入值 0 是否是应该屏蔽的特殊“填充”值。这在使用可能需要可变长度输入的循环层时很有用。如果为 True,则模型中的所有后续层都需要支持掩码,否则将引发异常。如果 mask_zero 设置为 True,结果,索引 0 不能在词汇表中使用(input_dim 应等于词汇表的大小 + 1)。
我想知道,这是什么意思?查看TensorFlow 的自定义层指南和tf.keras.layer.Layer文档,不清楚应该做什么来支持屏蔽
我如何支持屏蔽?
如何从过去的图层访问蒙版?
假设输入(batch, time, channels)or `(batch, time) 掩码看起来会不同吗?它们的形状会是什么?
我如何将它传递到下一层?
为了支持屏蔽,应该compute_mask在自定义层内实现该方法
要访问掩码,只需将 argument 添加为call方法中的第二个位置参数mask,即可访问(例如call(self, inputs, mask=None))
这个不能猜,是before层负责计算mask
一旦实现,将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
Run Code Online (Sandbox Code Playgroud)
请注意,此示例仅传递蒙版,如果图层输出的形状与收到的形状不同,您应该相应地更改蒙版以compute_mask传递正确的形状
tf.keras现在,屏蔽和填充文档中也包含了解释。
| 归档时间: |
|
| 查看次数: |
4187 次 |
| 最近记录: |