def meanfieldupdate_p(self, stepsize=1.0): """ Update p given the network parameters and the current variational parameters of the weight distributions. :return: """ logit_p = self.network.expected_log_p( ) - self.network.expected_log_notp() logit_p += self.network.kappa * self.network.expected_log_v( ) - gammaln(self.network.kappa) logit_p += gammaln( self.mf_kappa_1) - self.mf_kappa_1 * np.log(self.mf_v_1) logit_p += gammaln(self.kappa_0) - self.kappa_0 * np.log(self.nu_0) logit_p += self.mf_kappa_0 * np.log(self.mf_v_0) - gammaln( self.mf_kappa_0) p_hat = logistic(logit_p) self.mf_p = (1.0 - stepsize) * self.mf_p + stepsize * p_hat
def meanfieldupdate_p(self, stepsize=1.0): """ Update p given the network parameters and the current variational parameters of the weight distributions. :return: """ logit_p = self.network.expected_log_p() - self.network.expected_log_notp() logit_p += self.network.kappa * self.network.expected_log_v() - gammaln(self.network.kappa) logit_p += gammaln(self.mf_kappa_1) - self.mf_kappa_1 * np.log(self.mf_v_1) logit_p += gammaln(self.kappa_0) - self.kappa_0 * np.log(self.nu_0) logit_p += self.mf_kappa_0 * np.log(self.mf_v_0) - gammaln(self.mf_kappa_0) # p_hat = logistic(logit_p) # self.mf_p = (1.0 - stepsize) * self.mf_p + stepsize * p_hat logit_p_hat = (1-stepsize) * logit(self.mf_p) + \ stepsize * logit_p # self.mf_p = logistic(logit_p_hat) self.mf_p = np.clip(logistic(logit_p_hat), 1e-8, 1-1e-8)