:py:mod:`rofunc.learning.utils.networks`
========================================

.. py:module:: rofunc.learning.utils.networks

.. autodoc2-docstring:: rofunc.learning.utils.networks
   :allowtitles:

Module Contents
---------------

Classes
~~~~~~~

.. list-table::
   :class: autosummary longtable
   :align: left

   * - :py:obj:`SqueezeLayer <rofunc.learning.utils.networks.SqueezeLayer>`
     - .. autodoc2-docstring:: rofunc.learning.utils.networks.SqueezeLayer
          :summary:
   * - :py:obj:`BaseNorm <rofunc.learning.utils.networks.BaseNorm>`
     - .. autodoc2-docstring:: rofunc.learning.utils.networks.BaseNorm
          :summary:
   * - :py:obj:`RunningNorm <rofunc.learning.utils.networks.RunningNorm>`
     - .. autodoc2-docstring:: rofunc.learning.utils.networks.RunningNorm
          :summary:
   * - :py:obj:`EMANorm <rofunc.learning.utils.networks.EMANorm>`
     - .. autodoc2-docstring:: rofunc.learning.utils.networks.EMANorm
          :summary:

Functions
~~~~~~~~~

.. list-table::
   :class: autosummary longtable
   :align: left

   * - :py:obj:`build_mlp <rofunc.learning.utils.networks.build_mlp>`
     - .. autodoc2-docstring:: rofunc.learning.utils.networks.build_mlp
          :summary:
   * - :py:obj:`build_cnn <rofunc.learning.utils.networks.build_cnn>`
     - .. autodoc2-docstring:: rofunc.learning.utils.networks.build_cnn
          :summary:

API
~~~

.. py:class:: SqueezeLayer(*args, **kwargs)
   :canonical: rofunc.learning.utils.networks.SqueezeLayer

   Bases: :py:obj:`torch.nn.Module`

   .. autodoc2-docstring:: rofunc.learning.utils.networks.SqueezeLayer

   .. rubric:: Initialization

   .. autodoc2-docstring:: rofunc.learning.utils.networks.SqueezeLayer.__init__

   .. py:method:: forward(x)
      :canonical: rofunc.learning.utils.networks.SqueezeLayer.forward

      .. autodoc2-docstring:: rofunc.learning.utils.networks.SqueezeLayer.forward

.. py:class:: BaseNorm(num_features: int, eps: float = 1e-05)
   :canonical: rofunc.learning.utils.networks.BaseNorm

   Bases: :py:obj:`torch.nn.Module`, :py:obj:`abc.ABC`

   .. autodoc2-docstring:: rofunc.learning.utils.networks.BaseNorm

   .. rubric:: Initialization

   .. autodoc2-docstring:: rofunc.learning.utils.networks.BaseNorm.__init__

   .. py:attribute:: running_mean
      :canonical: rofunc.learning.utils.networks.BaseNorm.running_mean
      :type: torch.Tensor
      :value: None

      .. autodoc2-docstring:: rofunc.learning.utils.networks.BaseNorm.running_mean

   .. py:attribute:: running_var
      :canonical: rofunc.learning.utils.networks.BaseNorm.running_var
      :type: torch.Tensor
      :value: None

      .. autodoc2-docstring:: rofunc.learning.utils.networks.BaseNorm.running_var

   .. py:attribute:: count
      :canonical: rofunc.learning.utils.networks.BaseNorm.count
      :type: torch.Tensor
      :value: None

      .. autodoc2-docstring:: rofunc.learning.utils.networks.BaseNorm.count

   .. py:method:: reset_running_stats() -> None
      :canonical: rofunc.learning.utils.networks.BaseNorm.reset_running_stats

      .. autodoc2-docstring:: rofunc.learning.utils.networks.BaseNorm.reset_running_stats

   .. py:method:: forward(x: torch.Tensor) -> torch.Tensor
      :canonical: rofunc.learning.utils.networks.BaseNorm.forward

      .. autodoc2-docstring:: rofunc.learning.utils.networks.BaseNorm.forward

   .. py:method:: update_stats(batch: torch.Tensor) -> None
      :canonical: rofunc.learning.utils.networks.BaseNorm.update_stats
      :abstractmethod:

      .. autodoc2-docstring:: rofunc.learning.utils.networks.BaseNorm.update_stats

.. py:class:: RunningNorm(num_features: int, eps: float = 1e-05)
   :canonical: rofunc.learning.utils.networks.RunningNorm

   Bases: :py:obj:`rofunc.learning.utils.networks.BaseNorm`

   .. autodoc2-docstring:: rofunc.learning.utils.networks.RunningNorm

   .. rubric:: Initialization

   .. autodoc2-docstring:: rofunc.learning.utils.networks.RunningNorm.__init__

   .. py:method:: update_stats(batch: torch.Tensor) -> None
      :canonical: rofunc.learning.utils.networks.RunningNorm.update_stats

      .. autodoc2-docstring:: rofunc.learning.utils.networks.RunningNorm.update_stats

.. py:class:: EMANorm(num_features: int, decay: float = 0.99, eps: float = 1e-05)
   :canonical: rofunc.learning.utils.networks.EMANorm

   Bases: :py:obj:`rofunc.learning.utils.networks.BaseNorm`

   .. autodoc2-docstring:: rofunc.learning.utils.networks.EMANorm

   .. rubric:: Initialization

   .. autodoc2-docstring:: rofunc.learning.utils.networks.EMANorm.__init__

   .. py:attribute:: inv_learning_rate
      :canonical: rofunc.learning.utils.networks.EMANorm.inv_learning_rate
      :type: torch.Tensor
      :value: None

      .. autodoc2-docstring:: rofunc.learning.utils.networks.EMANorm.inv_learning_rate

   .. py:attribute:: num_batches
      :canonical: rofunc.learning.utils.networks.EMANorm.num_batches
      :type: torch.IntTensor
      :value: None

      .. autodoc2-docstring:: rofunc.learning.utils.networks.EMANorm.num_batches

   .. py:method:: reset_running_stats()
      :canonical: rofunc.learning.utils.networks.EMANorm.reset_running_stats

      .. autodoc2-docstring:: rofunc.learning.utils.networks.EMANorm.reset_running_stats

   .. py:method:: update_stats(batch: torch.Tensor) -> None
      :canonical: rofunc.learning.utils.networks.EMANorm.update_stats

      .. autodoc2-docstring:: rofunc.learning.utils.networks.EMANorm.update_stats

.. py:function:: build_mlp(in_size: int, hid_sizes: typing.Iterable[int], out_size: int = 1, name: typing.Optional[str] = None, activation: typing.Type[torch.nn.Module] = nn.ReLU, dropout_prob: float = 0.0, squeeze_output: bool = False, flatten_input: bool = False, normalize_input_layer: typing.Optional[typing.Type[torch.nn.Module]] = None) -> torch.nn.Module
   :canonical: rofunc.learning.utils.networks.build_mlp

   .. autodoc2-docstring:: rofunc.learning.utils.networks.build_mlp

.. py:function:: build_cnn(in_channels: int, hid_channels: typing.Iterable[int], out_size: int = 1, name: typing.Optional[str] = None, activation: typing.Type[torch.nn.Module] = nn.ReLU, kernel_size: int = 3, stride: int = 1, padding: typing.Union[int, str] = 'same', dropout_prob: float = 0.0, squeeze_output: bool = False) -> torch.nn.Module
   :canonical: rofunc.learning.utils.networks.build_cnn

   .. autodoc2-docstring:: rofunc.learning.utils.networks.build_cnn
