class_docstr: Combine representations by concatenation follow by a linear projection and activation.
docstr: Initialize the combination.
  
  :param input_dims:
      the input dimensions
  :param output_dim:
      the output dimension. Defaults to the first input dimension
  :param bias:
      whether to add a bias term in between the linear projection and the activation
  :param dropout:
      dropout to use before the activation
  :param activation:
      the activation, or a hint thereof
  :param activation_kwargs:
      additional keyword-based parameters used to instantiate the activation
  
  :raises ValueError:
      if `input_dims` is empty
docstr_tok: ["Initialize","the","combination",".",":","param","input_dims",":","the","input","dimensions",":","param","output_dim",":","the","output","dimension",".","Defaults","to","the","first","input","dimension",":","param","bias",":","whether","to","add","a","bias","term","in","between","the","linear","projection","and","the","activation",":","param","dropout",":","dropout","to","use","before","the","activation",":","param","activation",":","the","activation",",","or","a","hint","thereof",":","param","activation_kwargs",":","additional","keyword-based","parameters","used","to","instantiate","the","activation",":","raises","ValueError",":","if","`","input_dims","`","is","empty"]
code: def __init__(
      self,
      input_dims: Sequence[int],
      output_dim: Optional[int] = None,
      bias: bool = True,
      dropout: float = 0.0,
      activation: HintOrType[nn.Module] = nn.Identity,
      activation_kwargs: OptionalKwargs = None,
  ) -> None:
      """
      Initialize the combination.
  
      :param input_dims:
          the input dimensions
      :param output_dim:
          the output dimension. Defaults to the first input dimension
      :param bias:
          whether to add a bias term in between the linear projection and the activation
      :param dropout:
          dropout to use before the activation
      :param activation:
          the activation, or a hint thereof
      :param activation_kwargs:
          additional keyword-based parameters used to instantiate the activation
  
      :raises ValueError:
          if `input_dims` is empty
      """
      super().__init__()
      if not input_dims:
          raise ValueError("Cannot provide empty input dimensions")
      output_dim = output_dim or input_dims[0]
      self.projection = nn.Sequential(
          nn.Linear(sum(input_dims), output_dim, bias=bias),
          nn.Dropout(dropout),
          activation_resolver.make(activation, activation_kwargs),
      )
  
imports: import logging
  from abc import ABC, abstractmethod
  from typing import Any, Callable, Iterable, Mapping, Optional, Sequence, Tuple
  import torch
  from class_resolver import ClassResolver, Hint, HintOrType, OptionalKwargs
  from class_resolver.contrib.torch import activation_resolver, aggregation_resolver
  from torch import nn
  from ..utils import ExtraReprMixin, combine_complex, split_complex
label_desc: Use image node_id 1 to create a new ConcatProjectionCombination object from inherited base classes: ConcatCombination with example: obj = ConcatProjectionCombination(input_dims, output_dim, bias, dropout, activation, activation_kwargs)