Module ai.utils.torch.nn

Utility methods and classes for neural networks defined in PyTorch.

Expand source code
"""Utility methods and classes for neural networks defined in PyTorch."""


from ._noisy_linear import NoisyLinear


__all__ = ["NoisyLinear"]

Classes

class NoisyLinear (in_features: int, out_features: int, std_init: float, bias: bool = True)

Implementation of a noisy (linear) network.

Noisy networks add random noise to the activation, scaled by learnable weights.

Args

in_features : int
Number of in features.
out_features : int
Number of out features.
std_init : float
Initial standard deviation of the noise.
bias : bool, optional
If True, uses a bias a term in the linear transformation. Defaults to True.

Ancestors

  • torch.nn.modules.linear.Linear
  • torch.nn.modules.module.Module

Class variables

var get_noise
var in_features : int
var out_features : int
var weight : torch.Tensor

Methods

def forward(self, x) ‑> Callable[..., Any]
Expand source code
def forward(self, x):
    """"""
    if self.training:
        epsin = self.get_noise(self.in_features, self.noise_weight.dtype, self.noise_weight.device)
        epsout = self.get_noise(self.out_features, self.noise_weight.dtype, self.noise_weight.device)
        self.weps = epsout.ger(epsin)
        self.beps = self.get_noise(self.out_features, self.noise_weight.dtype, self.noise_weight.device)

        return super().forward(x) + F.linear(
            x, self.noise_weight * self.weps, self.noise_bias * self.beps
        )
    else:
        return super().forward(x)