def test_sample_discrete_log(): assert_equal(sample_discrete_log([-1.]), 0) assert_equal(sample_discrete_log([-1e3]), 0) assert_equal(sample_discrete_log([-1e-3]), 0) assert_equal(sample_discrete_log([-1., -1e3]), 0) assert_equal(sample_discrete_log([-1e3, -1.]), 1) assert_raises(Exception, sample_discrete_log, [])
def compress_seq_gibbs(passes=PASSES): ''' Compress image via sequentiall-initialized gibbs sampling. ''' assert passes >= 1 assert os.path.exists(SAMPLES), 'first create dataset' print 'seq+gibbs start {} passes'.format(passes) model = ImageModel() mixture = ImageModel.Mixture() mixture.init(model) scores = numpy.zeros(1, dtype=numpy.float32) assignments = {} for i, xy in enumerate(json_stream_load(SAMPLES)): scores.resize(len(mixture)) mixture.score_value(model, xy, scores) groupid = sample_discrete_log(scores) mixture.add_value(model, groupid, xy) assignments[i] = mixture.id_tracker.packed_to_global(groupid) print 'seq+gibbs init with {} components'.format(len(mixture)) for _ in xrange(passes - 1): for i, xy in enumerate(json_stream_load(SAMPLES)): groupid = mixture.id_tracker.global_to_packed(assignments[i]) mixture.remove_value(model, groupid, xy) scores.resize(len(mixture)) mixture.score_value(model, xy, scores) groupid = sample_discrete_log(scores) mixture.add_value(model, groupid, xy) assignments[i] = mixture.id_tracker.packed_to_global(groupid) print 'seq+gibbs found {} components'.format(len(mixture)) image = synthesize_image(model, mixture) scipy.misc.imsave(os.path.join(RESULTS, 'seq_gibbs.png'), image)
def compress_annealing(passes=PASSES): ''' Compress image via subsample annealing. ''' assert passes >= 1 assert os.path.exists(SAMPLES), 'first create dataset' print 'annealing start {} passes'.format(passes) model = ImageModel() mixture = ImageModel.Mixture() mixture.init(model) scores = numpy.zeros(1, dtype=numpy.float32) assignments = {} to_add = json_loop_load(SAMPLES) to_remove = json_loop_load(SAMPLES) for next_action_is_add in annealing_schedule(passes): if next_action_is_add: i, xy = to_add.next() if i in assignments: break scores.resize(len(mixture)) mixture.score_value(model, xy, scores) groupid = sample_discrete_log(scores) mixture.add_value(model, groupid, xy) assignments[i] = mixture.id_tracker.packed_to_global(groupid) else: i, xy = to_remove.next() groupid = mixture.id_tracker.global_to_packed(assignments.pop(i)) mixture.remove_value(model, groupid, xy) print 'annealing found {} components'.format(len(mixture)) image = synthesize_image(model, mixture) scipy.misc.imsave(os.path.join(RESULTS, 'annealing.png'), image)
def sample_assignments(self, sample_size): ''' Sample partial assignment vector [X_0, ..., X_{n-1}] where n = sample_size <= N = dataset_size. ''' assert sample_size <= self.dataset_size assignments = [] counts = [] scores = [] bogus = 0 for size in xrange(sample_size): score_empty = self.score_add_value(0, bogus, size) if len(counts) == 0 or counts[-1] != 0: counts.append(0) scores.append(score_empty) else: scores[-1] = score_empty assign = sample_discrete_log(scores) counts[assign] += 1 size += 1 scores[assign] = self.score_add_value(counts[assign], bogus, bogus) assignments.append(assign) return assignments
def compress_sequential(): ''' Compress image via sequential initialization. ''' assert os.path.exists(SAMPLES), 'first create dataset' print 'sequential start' model = ImageModel() mixture = ImageModel.Mixture() mixture.init(model) scores = numpy.zeros(1, dtype=numpy.float32) for xy in json_stream_load(SAMPLES): scores.resize(len(mixture)) mixture.score_value(model, xy, scores) groupid = sample_discrete_log(scores) mixture.add_value(model, groupid, xy) print 'sequential found {} components'.format(len(mixture)) image = synthesize_image(model, mixture) scipy.misc.imsave(os.path.join(RESULTS, 'sequential.png'), image)
def test_sample_discrete_log_underflow(): sample_discrete_log([-1e3]) sample_discrete_log([-1e3, -1e-3])