code: def ravanbakhsh_set_layer(layer_size,
                            inputs,
                            mask=None,
                            sequential=False,
                            activation_fn=tf.nn.tanh,
                            dropout=0.0,
                            name=None):
    
    del dropout
    with tf.variable_scope(name, "ravanbakhsh_set_layer", [inputs]):
      if sequential:
        return linear_set_layer(
            layer_size,
            inputs - running_global_pool_1d(inputs),
            activation_fn=activation_fn,
            name=name)
      return linear_set_layer(
          layer_size,
          inputs - tf.expand_dims(global_pool_1d(inputs, mask=mask), axis=1),
          activation_fn=activation_fn,
          name=name)
docs: Layer from Deep Sets paper: https://arxiv.org/abs/1611.04500 .
  
    More parameter-efficient version of a linear-set-layer with context.
  
    Args:
      layer_size: Dimension to transform the input vectors to.
      inputs: A tensor of shape [batch_size, sequence_length, vector]
        containing the sequences of input vectors.
      mask: A tensor of shape [batch_size, sequence_length] containing a
        mask for the inputs with 1's for existing elements, and 0's elsewhere.
      sequential: If true, will use a running global pool so each element will
        only depend on those before it. Set true if this layer is being used in
        an output sequence.
      activation_fn: The activation function to use.
      dropout: dropout.
      name: name.
  
    Returns:
      Tensor of shape [batch_size, sequence_length, vector] containing the
      sequences of transformed vectors.