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
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_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)
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)
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)
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)