|
|
|
@@ -198,9 +198,9 @@ class Exponential(Distribution): |
|
|
|
return self._entropy(rate) + self._kl_loss(dist, rate_b, rate) |
|
|
|
|
|
|
|
|
|
|
|
def _prob(self, value, rate=None): |
|
|
|
def _log_prob(self, value, rate=None): |
|
|
|
r""" |
|
|
|
pdf of Exponential distribution. |
|
|
|
log_pdf of Exponential distribution. |
|
|
|
|
|
|
|
Args: |
|
|
|
Args: |
|
|
|
@@ -211,15 +211,16 @@ class Exponential(Distribution): |
|
|
|
Value should be greater or equal to zero. |
|
|
|
|
|
|
|
.. math:: |
|
|
|
pdf(x) = rate * \exp(-1 * \lambda * x) if x >= 0 else 0 |
|
|
|
log_pdf(x) = \log(rate) - rate * x if x >= 0 else 0 |
|
|
|
""" |
|
|
|
value = self._check_value(value, "value") |
|
|
|
value = self.cast(value, self.dtype) |
|
|
|
rate = self._check_param(rate) |
|
|
|
prob = self.exp(self.log(rate) - rate * value) |
|
|
|
prob = self.log(rate) - rate * value |
|
|
|
zeros = self.fill(self.dtypeop(prob), self.shape(prob), 0.0) |
|
|
|
neginf = self.fill(self.dtypeop(prob), self.shape(prob), -np.inf) |
|
|
|
comp = self.less(value, zeros) |
|
|
|
return self.select(comp, zeros, prob) |
|
|
|
return self.select(comp, neginf, prob) |
|
|
|
|
|
|
|
def _cdf(self, value, rate=None): |
|
|
|
r""" |
|
|
|
@@ -243,6 +244,27 @@ class Exponential(Distribution): |
|
|
|
comp = self.less(value, zeros) |
|
|
|
return self.select(comp, zeros, cdf) |
|
|
|
|
|
|
|
def _log_survival(self, value, rate=None): |
|
|
|
r""" |
|
|
|
log survival_function of Exponential distribution. |
|
|
|
|
|
|
|
Args: |
|
|
|
value (Tensor): value to be evaluated. |
|
|
|
rate (Tensor): rate of the distribution. Default: self.rate. |
|
|
|
|
|
|
|
Note: |
|
|
|
Value should be greater or equal to zero. |
|
|
|
|
|
|
|
.. math:: |
|
|
|
log_survival_function(x) = -1 * \lambda * x if x >= 0 else 0 |
|
|
|
""" |
|
|
|
value = self._check_value(value, 'value') |
|
|
|
value = self.cast(value, self.dtype) |
|
|
|
rate = self._check_param(rate) |
|
|
|
sf = -1. * rate * value |
|
|
|
zeros = self.fill(self.dtypeop(sf), self.shape(sf), 0.0) |
|
|
|
comp = self.less(value, zeros) |
|
|
|
return self.select(comp, zeros, sf) |
|
|
|
|
|
|
|
def _kl_loss(self, dist, rate_b, rate=None): |
|
|
|
""" |
|
|
|
|