fusionlab.nn.components.StaticEnrichmentLayer

class fusionlab.nn.components.StaticEnrichmentLayer[source]

Bases: Layer, NNLearner

Static Enrichment Layer for combining static and temporal features [1].

This layer enriches temporal features with static context, enabling the model to modulate temporal dynamics based on static information. It concatenates a tiled static context vector to temporal features and processes them through a GatedResidualNetwork, yielding an enriched feature map that combines both static and temporal information.

\[\mathbf{Z} = \text{GRN}\big([\mathbf{C}, \mathbf{X}]\big)\]

where \(\mathbf{C}\) is a static context vector tiled over the time dimension, and \(\mathbf{X}\) are the temporal features.

Parameters:
  • units (int) – Number of hidden units within the internally used GatedResidualNetwork.

  • activation (str, optional) – Activation function used in the GRN. Must be one of {‘elu’, ‘relu’, ‘tanh’, ‘sigmoid’, ‘linear’}. Defaults to 'elu'.

  • use_batch_norm (bool, optional) – Whether to apply batch normalization within the GRN. Defaults to False.

  • **kwargs – Additional arguments passed to the parent Keras Layer.

Notes

This layer performs the following: 1. Expand static context from shape

\((B, U)\) to \((B, T, U)\).

  1. Concatenate with temporal features \((B, T, D)\) along the last dimension.

  2. Pass the combined tensor through a GatedResidualNetwork.

call(`static_context_vector`, `temporal_features`,

training=False)

Forward pass of the static enrichment layer.

get_config()[source]

Returns the configuration dictionary for serialization.

from_config(`config`)[source]

Instantiates the layer from a configuration dictionary.

Examples

>>> from fusionlab.nn.components import StaticEnrichmentLayer
>>> import tensorflow as tf
>>> # Define static context of shape (batch_size, units)
... # and temporal features of shape
... # (batch_size, time_steps, units)
>>> static_context_vector = tf.random.normal((32, 64))
>>> temporal_features = tf.random.normal((32, 10, 64))
>>> # Instantiate the static enrichment layer
>>> sel = StaticEnrichmentLayer(
...     units=64,
...     activation='relu',
...     use_batch_norm=True
... )
>>> # Forward pass
>>> outputs = sel(
...     static_context_vector,
...     temporal_features,
...     training=True
... )

See also

GatedResidualNetwork

Used within the static enrichment layer to combine static and temporal features.

TemporalFusionTransformer

Incorporates the static enrichment mechanism.

References

__init__(units, activation='elu', use_batch_norm=False, **kwargs)[source]

Initialize the StaticEnrichmentLayer.

Parameters:
  • units (int) – Number of hidden units in the internal GatedResidualNetwork.

  • activation (str, optional) – Activation function for the GRN. Defaults to 'elu'.

  • use_batch_norm (bool, optional) – Whether to apply batch normalization in the GRN. Defaults to False.

  • **kwargs – Additional arguments passed to the parent Keras Layer.

Methods

__init__(units[, activation, use_batch_norm])

Initialize the StaticEnrichmentLayer.

add_loss(loss)

Can be called inside of the call() method to add a scalar loss.

add_metric(*args, **kwargs)

add_variable(shape, initializer[, dtype, ...])

Add a weight variable to the layer.

add_weight([shape, initializer, dtype, ...])

Add a weight variable to the layer.

build(input_shape)

build_from_config(config)

Builds the layer's states with the supplied config dict.

call(temporal_features, context_vector[, ...])

Forward pass of the static enrichment layer.

compute_mask(inputs, previous_mask)

compute_output_shape(*args, **kwargs)

compute_output_spec(*args, **kwargs)

count_params()

Count the total number of scalars composing the weights.

from_config(config)

Create a new instance from a config dictionary.

get_build_config()

Returns a dictionary with the layer's input shape.

get_config()

Return the layer configuration for serialization.

get_params([deep])

Get the parameters for this learner.

get_weights()

Return the values of layer.weights as a list of NumPy arrays.

help(**kwargs)

load(file_path[, format])

Load the learner's state from a specified file in the desired format.

load_own_variables(store)

Loads the state of the layer.

quantize(mode[, type_check, config])

quantized_build(input_shape, mode)

quantized_call(*args, **kwargs)

rematerialized_call(layer_call, *args, **kwargs)

Enable rematerialization dynamically for layer's call method.

save([file_path, format, overwrite, ...])

Save the learner's state to a specified file in the desired format.

save_own_variables(store)

Saves the state of the layer.

set_params(**params)

Set the parameters of this learner.

set_weights(weights)

Sets the values of layer.weights from a list of NumPy arrays.

stateless_call(trainable_variables, ...[, ...])

Call the layer without any side effects.

summary()

Provide a summary of the learner's parameters.

symbolic_call(*args, **kwargs)

Attributes

compute_dtype

The dtype of the computations performed by the layer.

dtype

Alias of layer.variable_dtype.

dtype_policy

input

Retrieves the input tensor(s) of a symbolic operation.

input_dtype

The dtype layer inputs should be converted to.

input_spec

losses

List of scalar losses from add_loss, regularizers and sublayers.

metrics

List of all metrics.

metrics_variables

List of all metric variables.

my_params

non_trainable_variables

List of all non-trainable layer state.

non_trainable_weights

List of all non-trainable weight variables of the layer.

output

Retrieves the output tensor(s) of a layer.

path

The path of the layer.

quantization_mode

The quantization mode of this layer, None if not quantized.

supports_masking

Whether this layer supports computing a mask using compute_mask.

trainable

Settable boolean, whether this layer should be trainable or not.

trainable_variables

List of all trainable layer state.

trainable_weights

List of all trainable weight variables of the layer.

variable_dtype

The dtype of the state (weights) of the layer.

variables

List of all layer state, including random seeds.

weights

List of all weight variables of the layer.

__init__(units, activation='elu', use_batch_norm=False, **kwargs)[source]

Initialize the StaticEnrichmentLayer.

Parameters:
  • units (int) – Number of hidden units in the internal GatedResidualNetwork.

  • activation (str, optional) – Activation function for the GRN. Defaults to 'elu'.

  • use_batch_norm (bool, optional) – Whether to apply batch normalization in the GRN. Defaults to False.

  • **kwargs – Additional arguments passed to the parent Keras Layer.

call(temporal_features, context_vector, training=False)[source]

Forward pass of the static enrichment layer.

Parameters:
  • static_context_vector (tf.Tensor) – Static context of shape \((B, U)\).

  • temporal_features (tf.Tensor) – Temporal features of shape \((B, T, D)\).

  • training (bool, optional) – Whether the layer is in training mode. Defaults to False.

Returns:

Enriched temporal features of shape \((B, T, U)\), assuming units = U.

Return type:

tf.Tensor

Notes

  1. Expand and tile static_context_vector over time steps.

  2. Concatenate with temporal_features.

  3. Pass through internal GRN for final transformation.

get_config()[source]

Return the layer configuration for serialization.

Returns:

Configuration dictionary containing initialization parameters.

Return type:

dict

classmethod from_config(config)[source]

Create a new instance from a config dictionary.

Parameters:

config (dict) – Configuration as returned by get_config.

Returns:

Instantiated layer object.

Return type:

StaticEnrichmentLayer

help(**kwargs)
my_params = StaticEnrichmentLayer(units, activation='elu', use_batch_norm=False)