Spaces:
Restarting
Restarting
import torch | |
from torch.types import Number | |
def amp_to_db(x: torch.Tensor, eps=torch.finfo(torch.float64).eps, top_db=40) -> torch.Tensor: | |
""" | |
Convert the input tensor from amplitude to decibel scale. | |
Arguments: | |
x {[torch.Tensor]} -- [Input tensor.] | |
Keyword Arguments: | |
eps {[float]} -- [Small value to avoid numerical instability.] | |
(default: {torch.finfo(torch.float64).eps}) | |
top_db {[float]} -- [threshold the output at ``top_db`` below the peak] | |
` (default: {40}) | |
Returns: | |
[torch.Tensor] -- [Output tensor in decibel scale.] | |
""" | |
x_db = 20 * torch.log10(x.abs() + eps) | |
return torch.max(x_db, (x_db.max(-1).values - top_db).unsqueeze(-1)) | |
def temperature_sigmoid(x: torch.Tensor, x0: float, temp_coeff: float) -> torch.Tensor: | |
""" | |
Apply a sigmoid function with temperature scaling. | |
Arguments: | |
x {[torch.Tensor]} -- [Input tensor.] | |
x0 {[float]} -- [Parameter that controls the threshold of the sigmoid.] | |
temp_coeff {[float]} -- [Parameter that controls the slope of the sigmoid.] | |
Returns: | |
[torch.Tensor] -- [Output tensor after applying the sigmoid with temperature scaling.] | |
""" | |
return torch.sigmoid((x - x0) / temp_coeff) | |
def linspace(start: Number, stop: Number, num: int = 50, endpoint: bool = True, **kwargs) -> torch.Tensor: | |
""" | |
Generate a linearly spaced 1-D tensor. | |
Arguments: | |
start {[Number]} -- [The starting value of the sequence.] | |
stop {[Number]} -- [The end value of the sequence, unless `endpoint` is set to False. | |
In that case, the sequence consists of all but the last of ``num + 1`` | |
evenly spaced samples, so that `stop` is excluded. Note that the step | |
size changes when `endpoint` is False.] | |
Keyword Arguments: | |
num {[int]} -- [Number of samples to generate. Default is 50. Must be non-negative.] | |
endpoint {[bool]} -- [If True, `stop` is the last sample. Otherwise, it is not included. | |
Default is True.] | |
**kwargs -- [Additional arguments to be passed to the underlying PyTorch `linspace` function.] | |
Returns: | |
[torch.Tensor] -- [1-D tensor of `num` equally spaced samples from `start` to `stop`.] | |
""" | |
if endpoint: | |
return torch.linspace(start, stop, num, **kwargs) | |
else: | |
return torch.linspace(start, stop, num + 1, **kwargs)[:-1] | |