def forward(self, features_mean, features_variance): features_stddev = torch.sqrt(features_variance) div = features_mean / features_stddev pdf = normpdf(div) cdf = normcdf(div) outputs_mean = features_mean * cdf + features_stddev * pdf outputs_variance = (features_mean ** 2 + features_variance) * cdf \ + features_mean * features_stddev * pdf - outputs_mean ** 2 if self._keep_variance_fn is not None: outputs_variance = self._keep_variance_fn(outputs_variance) return outputs_mean, outputs_variance
def _max_pool_internal(self, mu_a, mu_b, var_a, var_b): stddev = torch.sqrt(var_a + var_b) ab = mu_a - mu_b alpha = ab / stddev pdf = normpdf(alpha) cdf = normcdf(alpha) z_mu = stddev * pdf + ab * cdf + mu_b z_var = ((mu_a + mu_b) * stddev * pdf + (mu_a**2 + var_a) * cdf + (mu_b**2 + var_b) * (1.0 - cdf) - z_mu**2) if self._keep_variance_fn is not None: z_var = self._keep_variance_fn(z_var) return z_mu, z_var
def forward(self, features_mean, features_variance): features_stddev = torch.sqrt(features_variance) div = features_mean / features_stddev pdf = normpdf(div) cdf = normcdf(div) negative_cdf = 1.0 - cdf mu_cdf = features_mean * cdf stddev_pdf = features_stddev * pdf squared_mean_variance = features_mean**2 + features_variance mean_stddev_pdf = features_mean * stddev_pdf mean_r = mu_cdf + stddev_pdf variance_r = squared_mean_variance * cdf + mean_stddev_pdf - mean_r**2 mean_n = -features_mean * negative_cdf + stddev_pdf variance_n = squared_mean_variance * negative_cdf - mean_stddev_pdf - mean_n**2 covxy = -mean_r * mean_n outputs_mean = mean_r - self._negative_slope * mean_n outputs_variance = variance_r \ + self._negative_slope * self._negative_slope * variance_n \ - 2.0 * self._negative_slope * covxy if self._keep_variance_fn is not None: outputs_variance = self._keep_variance_fn(outputs_variance) return outputs_mean, outputs_variance