Example #1
0
    def estimate_loglikelihood_for_dataset(self,
                                           x_dataset,
                                           minibatch_size=1000):
        """
        Estimate the average  LOG LIKELIHOOD for the dataset.
        NOTE: Because this is NADE and not a real distribution,
        these likelihoods CAN and often ARE NEGATIVE! 
        Basically returns ld.sum() / n
        """
        loglikelihood = 0.0
        loglikelihood_sq = 0.0
        n = 0
        iterator = x_dataset.iterator(batch_size=minibatch_size,
                                      get_smaller_final_batch=True)
        for x in iterator:
            x = x.T  # VxB
            n += x.shape[1]
            # get negative log density for array
            ld = self.logdensity(x)
            # add together all negative log densities in array
            loglikelihood += ld.sum()
            loglikelihood_sq += (ld**2).sum()

        e = Estimation.sample_mean_from_sum_and_sum_sq(loglikelihood,
                                                       loglikelihood_sq, n)

        return e
Example #2
0
 def estimate_loglikelihood_for_dataset(self, x_dataset, minibatch_size=1000):
     loglikelihood = 0.0
     loglikelihood_sq = 0.0
     n = 0
     iterator = x_dataset.iterator(batch_size=minibatch_size, get_smaller_final_batch=True)
     for x in iterator:
         x = x.T  # VxB
         n += x.shape[1]
         ld = self.logdensity(x)
         loglikelihood += ld.sum()
         loglikelihood_sq += (ld ** 2).sum()
     return Estimation.sample_mean_from_sum_and_sum_sq(loglikelihood, loglikelihood_sq, n)
Example #3
0
def estimate_loss_for_dataset(dataset, loss_f, minibatch_size=1000):
    loss_sum = 0.0
    loss_sq_sum = 0.0
    n = 0
    iterator = dataset.iterator(batch_size=minibatch_size, get_smaller_final_batch=True, shuffle=False)
    for x in iterator:
        if not isinstance(x, tuple):
            x = [x]
        n += x[0].shape[0]
        x = [e.T for e in x]
        loss = loss_f(*x)
        loss_sum += loss.sum()
        loss_sq_sum += (loss ** 2).sum()
    return Estimation.sample_mean_from_sum_and_sum_sq(loss_sum, loss_sq_sum, n)
Example #4
0
 def estimate_loglikelihood_for_dataset(self,
                                        x_dataset,
                                        minibatch_size=1000):
     loglikelihood = 0.0
     loglikelihood_sq = 0.0
     n = 0
     iterator = x_dataset.iterator(batch_size=minibatch_size,
                                   get_smaller_final_batch=True)
     for x in iterator:
         x = x.T  # VxB
         n += x.shape[1]
         ld = self.logdensity(x)
         loglikelihood += ld.sum()
         loglikelihood_sq += (ld**2).sum()
     return Estimation.sample_mean_from_sum_and_sum_sq(
         loglikelihood, loglikelihood_sq, n)
 def estimate_average_loglikelihood_for_dataset_using_masks(self, x_dataset, masks_dataset, minibatch_size=20000, loops=1):
     loglikelihood = 0.0
     loglikelihood_sq = 0.0
     n = 0
     x_iterator = x_dataset.iterator(batch_size=minibatch_size, get_smaller_final_batch=True)
     m_iterator = masks_dataset.iterator(batch_size=minibatch_size)
     for _ in xrange(loops):
         for x, m in izip(x_iterator, m_iterator):
             x = x.T  # VxB
             batch_size = x.shape[1]
             m = m.T[:, :batch_size]
             n += batch_size
             lls = self.compiled_mask_logdensity_estimator(x, m)
             loglikelihood += np.sum(lls)
             loglikelihood_sq += np.sum(lls ** 2)
     return Estimation.sample_mean_from_sum_and_sum_sq(loglikelihood, loglikelihood_sq, n)
Example #6
0
def estimate_loss_for_dataset(dataset, loss_f, minibatch_size=1000):
    loss_sum = 0.0
    loss_sq_sum = 0.0
    n = 0
    iterator = dataset.iterator(batch_size=minibatch_size,
                                get_smaller_final_batch=True,
                                shuffle=False)
    for x in iterator:
        if not isinstance(x, tuple):
            x = [x]
        n += x[0].shape[0]
        x = [e.T for e in x]
        loss = loss_f(*x)
        loss_sum += loss.sum()
        loss_sq_sum += (loss**2).sum()
    return Estimation.sample_mean_from_sum_and_sum_sq(loss_sum, loss_sq_sum, n)
Example #7
0
 def estimate_average_loglikelihood_for_dataset_using_masks(
         self, x_dataset, masks_dataset, minibatch_size=20000, loops=1):
     loglikelihood = 0.0
     loglikelihood_sq = 0.0
     n = 0
     x_iterator = x_dataset.iterator(batch_size=minibatch_size,
                                     get_smaller_final_batch=True)
     m_iterator = masks_dataset.iterator(batch_size=minibatch_size)
     for _ in xrange(loops):
         for x, m in izip(x_iterator, m_iterator):
             x = x.T  # VxB
             batch_size = x.shape[1]
             m = m.T[:, :batch_size]
             n += batch_size
             lls = self.compiled_mask_logdensity_estimator(x, m)
             loglikelihood += np.sum(lls)
             loglikelihood_sq += np.sum(lls**2)
     return Estimation.sample_mean_from_sum_and_sum_sq(
         loglikelihood, loglikelihood_sq, n)