Skip to content

concat

concat

ConcatFusion

ConcatFusion(input_features, output_name, hidden_dimension)

Bases: SequentialFusion

Combines sequence features by projecting them into a shared embedding space and then concatenating them.

Source code in src/versatil/models/encoding/fusion/concat.py
def __init__(
    self,
    input_features: list[str],
    output_name: str,
    hidden_dimension: int,
):
    super().__init__(
        input_features=input_features,
        output_name=output_name,
        hidden_dimension=hidden_dimension,
    )

forward

forward(features)

Parameters:

Name Type Description Default
features list[Tensor]

List of sequence features [B, T, D_i] or [B, D_i]

required

Returns:

Type Description
Tensor

Fused features [B, T, hidden_dimension] or [B, hidden_dimension]

Source code in src/versatil/models/encoding/fusion/concat.py
def forward(self, features: list[torch.Tensor]) -> torch.Tensor:
    """
    Args:
        features: List of sequence features [B, T, D_i] or [B, D_i]

    Returns:
        Fused features [B, T, hidden_dimension] or [B, hidden_dimension]
    """
    if self.projections is None:
        raise RuntimeError("Projections must be set up before forward pass")
    projected = []
    for feat, proj in zip(features, self.projections, strict=True):
        projected.append(proj(feat))
    return torch.cat(projected, dim=-1)

get_output_specification

get_output_specification()

Get output specification.

Source code in src/versatil/models/encoding/fusion/concat.py
def get_output_specification(self) -> FeatureMetadata:
    """Get output specification."""
    output_dim = self.hidden_dimension * len(self.input_features)
    dimension: tuple[int, ...] = (output_dim,)
    if self._output_feature_type == FeatureType.SEQUENTIAL.value:
        dimension = (self._output_sequence_length, output_dim)
    return FeatureMetadata(
        key=self.output_name,
        feature_type=self._output_feature_type,
        dimension=dimension,
    )