|
import torch |
|
|
|
|
|
def mean_std_with_confidence_interval( |
|
vmin, vmax, sigma_scale: float, _steps=1000, round_decimals=4 |
|
): |
|
"""Computes mean and std given min,max values with respect a confidence interval (sigma_scale). |
|
|
|
sigma_scale = 1.65 -> 90% of samples are in range [vmin, vmax] |
|
sigma_scale = 1.96 -> 95% of samples are in range [vmin, vmax] |
|
sigma_scale = 2.58 -> 99% of samples are in range [vmin, vmax] |
|
""" |
|
|
|
|
|
x = torch.linspace(vmin, vmax, _steps) |
|
mu = x.mean(dim=-1) |
|
sigma = x.std(dim=-1) |
|
return (round(mu.item(), round_decimals), round((sigma * sigma_scale).item(), round_decimals)) |
|
|
|
|
|
class FeatureScalerZScore(torch.nn.Module): |
|
def __init__(self, loc: float, scale: float) -> None: |
|
|
|
super(FeatureScalerZScore, self).__init__() |
|
|
|
self.loc = loc |
|
self.scale = scale |
|
|
|
def forward(self, z): |
|
""" |
|
Args: |
|
z (Tensor): tensor of size (B, *) to be denormalized. |
|
Returns: |
|
x: tensor. |
|
""" |
|
return self.denormalize(z) |
|
|
|
def denormalize(self, z): |
|
x = z * self.scale + self.loc |
|
return x |
|
|
|
def normalize(self, x): |
|
z = (x - self.loc) / self.scale |
|
return z |
|
|