def collapsed_gibbs(self, wordIds, S, T): K = self.K V = self.V D = self.D N = self.N latent_vars = {} training_data = {} qbeta = Empirical(tf.Variable(tf.zeros([S, K, V]) + 0.01)) latent_vars[self.beta] = qbeta qtheta = [None] * D qz = [None] * D for d in range(D): qtheta[d] = Empirical(tf.Variable(tf.zeros([S, K]) + 0.1)) latent_vars[self.theta[d]] = qtheta[d] qz[d] = Empirical(tf.Variable(tf.zeros([S, N[d]], dtype=tf.int32))) latent_vars[self.z[d]] = qz[d] training_data[self.w[d]] = wordIds[d] self.latent_vars = latent_vars proposal_vars = {} proposal_vars[self.beta] = ed.complete_conditional(self.beta) cond_set = set(self.w + self.z) for d in range(D): proposal_vars[self.theta[d]] = \ ed.complete_conditional(self.theta[d]) proposal_vars[self.z[d]] = \ ed.complete_conditional(self.z[d], cond_set) self.inference = ed.Gibbs(latent_vars, proposal_vars, training_data) print("collapsed gibbs setup finished") self.inference.initialize(n_iter=T, n_print=1) print("initialize finished") self.__run_inference__(T) self.qbeta_sample = qbeta.eval()
def gibbs(self, wordIds, S, T): K = self.K V = self.V D = self.D N = self.N latent_vars = {} training_data = {} qbeta = Empirical(tf.Variable(tf.zeros([S, K, V]) + 0.01)) latent_vars[self.beta] = qbeta qtheta = [None] * D qz = [None] * D for d in range(D): qtheta[d] = Empirical(tf.Variable(tf.zeros([S, K]) + 0.1)) latent_vars[self.theta[d]] = qtheta[d] qz[d] = Empirical(tf.Variable(tf.zeros([S, N[d]], dtype=tf.int32))) latent_vars[self.z[d]] = qz[d] training_data[self.w[d]] = wordIds[d] self.latent_vars = latent_vars self.inference = ed.Gibbs(latent_vars, data=training_data) print("gibbs setup finished") self.inference.initialize(n_iter=T, n_print=1) self.__run_inference__(T) self.qbeta_sample = qbeta.eval()