class_docstr: The dense layer is defined by:
  
  .. math::
  
      \begin{align*}
          y_j = \sigma\left(\sum\limits_{i=0}^{F_{in}-1}w_{ij}x_i+b_j\right), && \forall 0\le j<F_{out}
      \end{align*}
  
  Parameters
  ----------
  input_size : tuple
      the size of the input.
  output_size : tuple
      the size of the output.
  weight : matrix-like
      the weight matrix.
  biases : array-like
      the biases.
  activation : str or None
      activation function name
  input_index_mapper : IndexMapper or None
      map indexes from this layer index to the input layer index size
code: def __init__(
      self,
      input_size,
      output_size,
      weights,
      biases,
      *,
      activation=None,
      input_index_mapper=None,
  ):
      super().__init__(
          input_size,
          output_size,
          activation=activation,
          input_index_mapper=input_index_mapper,
      )
      self.__weights = weights
      self.__biases = biases
  
imports: import itertools
  import numpy
label_desc: Use image node_id 1 to create a new DenseLayer object from inherited base classes: Layer with example: obj = DenseLayer(input_size, output_size, weights, biases)