def init_loc_fn(site): value = init_to_median(site, num_samples=50) # we also make sure the initial sigma is not too large. # (otherwise we run the danger of getting stuck in bad local optima during optimization). if site["name"] == "sigma": value = 0.1 * value return value
value = torch.randn(()).exp() * 10 kernel = NUTS(model, init_strategy=partial(init_to_value, values={"x": value})) kernel.setup(warmup_steps=10) assert_close(value, kernel.initial_params['x'].exp()) @pytest.mark.parametrize("init_strategy", [ init_to_feasible, init_to_mean, init_to_median, init_to_sample, init_to_uniform, init_to_value, init_to_feasible(), init_to_mean(), init_to_median(num_samples=4), init_to_sample(), init_to_uniform(radius=0.1), init_to_value(values={"x": torch.tensor(3.)}), init_to_generated( generate=lambda: init_to_value(values={"x": torch.rand(())})), ], ids=str_erase_pointers) def test_init_strategy_smoke(init_strategy): def model(): pyro.sample("x", dist.LogNormal(0, 1)) kernel = NUTS(model, init_strategy=init_strategy) kernel.setup(warmup_steps=10)