【问题标题】:What does self._compute_output_and_mask_jointly = True do in tf.keras.layers.Masking layer?self._compute_output_and_mask_jointly = True 在 tf.keras.layers.Masking 层中做什么?
【发布时间】:2023-01-16 12:01:07
【问题描述】:

tf.keras.layers.Masking 层在其__init__(...) 中将_compute_output_and_mask_jointly 设置为True,除了告诉它在其call(...) 中正在做什么之外,该属性还做了什么?

def __init__(self, mask_value=0., **kwargs):
  ...
  self._compute_output_and_mask_jointly = True

另外,mask已经在call(...)创建并应用。 compute_mask(...)的目的是什么?显得多余。

  def compute_mask(self, inputs, mask=None):
    return tf.reduce_any(tf.not_equal(inputs, self.mask_value), axis=-1)

  def call(self, inputs):
    boolean_mask = tf.reduce_any(
        tf.not_equal(inputs, self.mask_value), axis=-1, keepdims=True)
    outputs = inputs * tf.cast(boolean_mask, inputs.dtype)
    # Compute the mask and outputs simultaneously.
    outputs._keras_mask = tf.squeeze(boolean_mask, axis=-1)  # pylint: disable=protected-access
    return outputs

【问题讨论】:

    标签: tensorflow keras masking


    【解决方案1】:

    首先,一个沉重的,公平的警告:


    这是一个实现细节,永远不要使用它!

    可能实际上出去的路上。


    话虽如此,这是一个小优化,由所有图层类中的单个 layers.Masking 类使用。这是 TensorFlow Keras 的一部分(与 TensorFlow 本身相对)。当此属性存在并在层上设置为 True 时,Keras 框架假定输出掩码已在 __call__ 调用中计算并放入 KerasTensor._layer_mask 属性,并优化对 @ 的调用987654326@ 方法,在急切和图形跟踪模式下。这就是它的全部。十一岁之前没有魔法。

    实际上,creating the _layer_mask attribute on the output KerasTensor has the same effect。通过不设置这两个属性,您确实有一天可以避免令人讨厌的惊喜。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多