timesead.models.layers.planar_nf ================================ .. py:module:: timesead.models.layers.planar_nf Classes ------- .. autoapisummary:: timesead.models.layers.planar_nf.PlanarTransform timesead.models.layers.planar_nf.PlanarFlow Module Contents --------------- .. py:class:: PlanarTransform(dim: int, epsilon: float = 0.0001) Bases: :py:obj:`torch.nn.Module` Implementation of the invertible transformation used in planar flow f(z) = z + u * h(dot(w.T, z) + b) See Section 4.1 in https://arxiv.org/pdf/1505.05770.pdf. Initialise weights and bias. :param dim: Dimensionality of the distribution to be estimated. .. py:attribute:: epsilon :value: 0.0001 .. py:attribute:: w .. py:attribute:: b .. py:attribute:: u .. py:method:: forward(z: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor] .. py:method:: get_u_hat() -> None Enforce w^T u >= -1. When using h(.) = tanh(.), this is a sufficient condition for invertibility of the transformation f(z). See Appendix A.1. .. py:class:: PlanarFlow(dim: int, num_layers: int = 6) Bases: :py:obj:`torch.nn.Module` Base class for all neural network modules. Your models should also subclass this class. Modules can also contain other Modules, allowing them to be nested in a tree structure. You can assign the submodules as regular attributes:: import torch.nn as nn import torch.nn.functional as F class Model(nn.Module): def __init__(self) -> None: super().__init__() self.conv1 = nn.Conv2d(1, 20, 5) self.conv2 = nn.Conv2d(20, 20, 5) def forward(self, x): x = F.relu(self.conv1(x)) return F.relu(self.conv2(x)) Submodules assigned in this way will be registered, and will also have their parameters converted when you call :meth:`to`, etc. .. note:: As per the example above, an ``__init__()`` call to the parent class must be made before assignment on the child. :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool Make a planar flow by stacking planar transformations in sequence. :param dim: Dimensionality of the distribution to be estimated. :param num_layers: Number of transformations in the flow. .. py:attribute:: layers .. py:method:: forward(z: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor]