Source code for bayesflow.links.leaky
import keras
from bayesflow.utils.serialization import serializable
[docs]
@serializable("bayesflow.links")
class Leaky(keras.Layer):
r"""Leaky parity-odd power (l-POP) transform :math:`J_\lambda(x) = x(1 + |x|^{\lambda - 1})`.
Expands large magnitudes super-linearly while remaining odd and smooth,
improving numerical recovery of extreme log Bayes factors without affecting
properness of the scoring rule.
Parameters
----------
power : float
Exponent :math:`\lambda`. Default: 2.0.
"""
def __init__(self, power: float = 2.0, eps: float = 1e-8, **kwargs):
super().__init__(**kwargs)
self.power = power
self.eps = eps
[docs]
def call(self, x):
return x + x * keras.ops.power(keras.ops.abs(x) + self.eps, self.power - 1.0)
[docs]
def get_config(self):
return super().get_config() | {"power": self.power, "eps": self.eps}