def test_runner_multiprocessing_convergence(): N, D = 4, 5 defn = model_definition(N, [bb] * D) prng = rng() Y, posterior = data_with_posterior(defn, r=prng) view = numpy_dataview(Y) latents = [model.initialize(defn, view, prng) for _ in xrange(mp.cpu_count())] runners = [runner.runner(defn, view, latent, ['assign']) for latent in latents] r = parallel.runner(runners) r.run(r=prng, niters=1000) # burnin idmap = {C: i for i, C in enumerate(permutation_iter(N))} def sample_iter(): r.run(r=prng, niters=10) for latent in r.get_latents(): yield idmap[tuple(permutation_canonical(latent.assignments()))] ref = [None] def sample_fn(): if ref[0] is None: ref[0] = sample_iter() try: return next(ref[0]) except StopIteration: ref[0] = None return sample_fn() assert_discrete_dist_approx(sample_fn, posterior, ntries=100, kl_places=2)
def test_runner_multyvac(): defn = model_definition(10, [bb, nich, niw(3)]) Y = toy_dataset(defn) view = numpy_dataview(Y) kc = runner.default_kernel_config(defn) prng = rng() latents = [model.initialize(defn, view, prng) for _ in xrange(2)] runners = [runner.runner(defn, view, latent, kc) for latent in latents] r = parallel.runner(runners, backend='multyvac', layer='perf', core='f2') r.run(r=prng, niters=1000) r.run(r=prng, niters=1000)
def test_runner_multiprocessing(): defn = model_definition(10, [bb, nich, niw(3)]) Y = toy_dataset(defn) view = numpy_dataview(Y) kc = runner.default_kernel_config(defn) prng = rng() latents = [model.initialize(defn, view, prng) for _ in xrange(mp.cpu_count())] runners = [runner.runner(defn, view, latent, kc) for latent in latents] r = parallel.runner(runners) # check it is restartable r.run(r=prng, niters=10) r.run(r=prng, niters=10)
def run_dpgmm(niter=1000, datadir="../../", nfeatures=13): ranking = [10, 6, 7, 26, 5, 8, 4, 19, 12, 23, 24, 33, 28, 25, 14, 3, 0, 1, 21, 30, 11, 31, 13, 9, 22, 2, 27, 29, 32, 17, 18, 20, 16, 15] features, labels, lc, hr, tstart, \ features_lb, labels_lb, lc_lb, hr_lb, \ fscaled, fscaled_lb, fscaled_full, labels_all = \ load_data(datadir, tseg=1024.0, log_features=None, ranking=ranking) labels_phys = feature_engineering.convert_labels_to_physical(labels) labels_phys_lb = feature_engineering.convert_labels_to_physical(labels_lb) labels_all_phys = np.hstack([labels_phys["train"], labels_phys["val"], labels_phys["test"]]) fscaled_small = fscaled_full[:, :13] nchains = 8 # The random state object prng = rng() # Define a DP-GMM where the Gaussian is 2D defn = model_definition(fscaled_small.shape[0], [normal_inverse_wishart(fscaled_small.shape[1])]) fscaled_rec = np.array([(list(f),) for f in fscaled_small], dtype=[('', np.float32, fscaled_small.shape[1])]) # Create a wrapper around the numpy recarray which # data-microscopes understands view = numpy_dataview(fscaled_rec) # Initialize nchains start points randomly in the state space latents = [model.initialize(defn, view, prng) for _ in xrange(nchains)] # Create a runner for each chain runners = [runner.runner(defn, view, latent, kernel_config=['assign']) for latent in latents] r = parallel.runner(runners) r.run(r=prng, niters=niter) with open(datadir+"grs1915_dpgmm.pkl", "w") as f: pickle.dump(r, f) return
def test_runner_convergence(): N, D = 4, 5 defn = model_definition(N, [bb] * D) prng = rng() Y, posterior = data_with_posterior(defn, r=prng) view = numpy_dataview(Y) latent = model.initialize(defn, view, prng) r = runner.runner(defn, view, latent, ['assign']) r.run(r=prng, niters=1000) # burnin idmap = {C: i for i, C in enumerate(permutation_iter(N))} def sample_fn(): r.run(r=prng, niters=10) new_latent = r.get_latent() return idmap[tuple(permutation_canonical(new_latent.assignments()))] assert_discrete_dist_approx(sample_fn, posterior, ntries=100)
def _test_runner_kernel_config(kc_fn, models): defn = model_definition(10, models) Y = toy_dataset(defn) view = numpy_dataview(Y) kc = kc_fn(defn) prng = rng() ntries = 5 while ntries: latent = model.initialize(defn, view, prng) assignments = latent.assignments() r = runner.runner(defn, view, latent, kc) r.run(r=prng, niters=10) assignments1 = r.get_latent().assignments() # XXX: it should be very unlikely the assignments are all equal if assignments == assignments1: ntries -= 1 else: return # success assert_true(False) # exceeded ntries