def log_conditional_prob(self, x):
     # E_{Q(h|x)} log Q(h|x)
     h_mu, h_logvar = self.inference(x)
     h = sample_from_gaussian(h_mu, h_logvar)
     logp_h_given_x = tf.reduce_sum(
         -0.5 * np.log(2 * np.pi) - 0.5 * h_logvar -
         0.5 * tf.square(h - h_mu) / tf.exp(h_logvar),
         axis=-1)
     return logp_h_given_x, h
Esempio n. 2
0
 def get_independent_means(self,
                           num_samples,
                           burn_in_steps=100000,
                           random=True):
     v = tf.zeros([num_samples, self.vis_dim], dtype=tf.float32)
     if random:
         v = sample_from_gaussian(v, 2. * tf.log(self.sigma)) + self.vis_b
     for i in xrange(burn_in_steps):
         _, v = self.gibbs_vhv(v)
     h_1 = sample_from_bernoulli(self.vis2hid(v))
     v_1 = self.hid2vis(h_1)
     return v_1.numpy()
Esempio n. 3
0
 def get_independent_samples(self,
                             num_samples,
                             burn_in_steps=100000,
                             random=True,
                             initial_v=None):
     if initial_v is not None:
         v = initial_v
     else:
         v = tf.zeros([num_samples, self.vis_dim],
                      dtype=tf.float32) + self.vis_b
         if random:
             v = sample_from_gaussian(v, 2. * tf.log(self.sigma))
     for i in xrange(burn_in_steps):
         _, v = self.gibbs_vhv(v)
     return v.numpy()
Esempio n. 4
0
 def get_samples_single_chain(self,
                              num_samples,
                              adjacent_samples=10,
                              steps_between_samples=1000,
                              burn_in_steps=100000,
                              random=True):
     assert num_samples % adjacent_samples == 0
     v = tf.zeros([1, self.vis_dim], dtype=tf.float32) + self.vis_b
     if random:
         v = sample_from_gaussian(v, 2. * tf.log(self.sigma))
     for i in xrange(burn_in_steps):
         _, v = self.gibbs_vhv(v)
     sample_list = []
     for i in xrange(num_samples / adjacent_samples):
         for j in xrange(adjacent_samples):
             _, v = self.gibbs_vhv(v)
             sample_list.append(v.numpy())
         for i in xrange(steps_between_samples):
             _, v = self.gibbs_vhv(v)
     return np.vstack(sample_list)
 def get_h(self, x):
     h_mu, h_logvar = self.inference(x)
     h = sample_from_gaussian(h_mu, h_logvar)
     return h
Esempio n. 6
0
 def gibbs_hvh(self, h_0):
     v_1 = sample_from_gaussian(self.hid2vis(h_0), 2 * tf.log(self.sigma))
     v_1 = tf.stop_gradient(v_1)
     h_1 = sample_from_bernoulli(self.vis2hid(v_1))
     return v_1, h_1
Esempio n. 7
0
 def gibbs_vhv(self, v_0):
     h_1 = sample_from_bernoulli(self.vis2hid(v_0))
     v_1 = sample_from_gaussian(self.hid2vis(h_1), 2 * tf.log(self.sigma))
     v_1 = tf.stop_gradient(v_1)
     return h_1, v_1