def beta_binomial(): N, D1, D2 = 10, 2, 2 true_probs = ops.tensor([[0.7, 0.4], [0.6, 0.4]]) total_count = ops.tensor([[1000, 600], [400, 800]]) data = pyro.sample('data', dist.Binomial(total_count=total_count, probs=true_probs), sample_shape=(N, )) def model(N, D1, D2, data=None): with pyro.plate("plate_0", D1): alpha = pyro.sample("alpha", dist.HalfCauchy(1.)) beta = pyro.sample("beta", dist.HalfCauchy(1.)) with pyro.plate("plate_1", D2): probs = pyro.sample("probs", dist.Beta(alpha, beta)) with pyro.plate("data", N): pyro.sample("binomial", dist.Binomial(probs=probs, total_count=total_count), obs=data) return { 'model': model, 'model_args': (N, D1, D2), 'model_kwargs': { 'data': data } }
def eight_schools(): J = 8 y = ops.tensor([28.0, 8.0, -3.0, 7.0, -1.0, 1.0, 18.0, 12.0]) sigma = ops.tensor([15.0, 10.0, 16.0, 11.0, 9.0, 11.0, 10.0, 18.0]) def model(J, sigma, y=None): mu = pyro.sample('mu', dist.Normal(0, 5)) tau = pyro.sample('tau', dist.HalfCauchy(5)) with pyro.plate('J', J): theta = pyro.sample('theta', dist.Normal(mu, tau)) pyro.sample('obs', dist.Normal(theta, sigma), obs=y) return {'model': model, 'model_args': (J, sigma), 'model_kwargs': {'y': y}}
def model(): locs = pyro.param("locs", ops.randn(3), constraint=dist.constraints.real) scales = pyro.param("scales", ops.exp(ops.randn(3)), constraint=dist.constraints.positive) p = ops.tensor([0.5, 0.3, 0.2]) x = pyro.sample("x", dist.Categorical(p)) pyro.sample("obs", dist.Normal(locs[x], scales[x]), obs=data)
def test_nonempty_model_empty_guide_ok(backend, jit): def model(data): loc = pyro.param("loc", ops.tensor(0.0)) pyro.sample("x", dist.Normal(loc, 1.), obs=data) def guide(data): pass data = ops.tensor(2.) Elbo = infer.JitTrace_ELBO if jit else infer.Trace_ELBO elbo = Elbo(ignore_jit_warnings=True) assert_ok(model, guide, elbo, data)
def test_optimizer(backend, optim_name, optim_kwargs, jit): def model(data): p = pyro.param("p", ops.tensor(0.5)) pyro.sample("x", dist.Bernoulli(p), obs=data) def guide(data): pass data = ops.tensor(0.) pyro.get_param_store().clear() Elbo = infer.JitTrace_ELBO if jit else infer.Trace_ELBO elbo = Elbo(ignore_jit_warnings=True) optimizer = getattr(optim, optim_name)(optim_kwargs.copy()) inference = infer.SVI(model, guide, optimizer, elbo) for i in range(2): inference.step(data)
def test_constraints(backend, jit): data = ops.tensor(0.5) def model(): locs = pyro.param("locs", ops.randn(3), constraint=dist.constraints.real) scales = pyro.param("scales", ops.exp(ops.randn(3)), constraint=dist.constraints.positive) p = ops.tensor([0.5, 0.3, 0.2]) x = pyro.sample("x", dist.Categorical(p)) pyro.sample("obs", dist.Normal(locs[x], scales[x]), obs=data) def guide(): q = pyro.param("q", ops.exp(ops.randn(3)), constraint=dist.constraints.simplex) pyro.sample("x", dist.Categorical(q)) Elbo = infer.JitTrace_ELBO if jit else infer.Trace_ELBO elbo = Elbo(ignore_jit_warnings=True) assert_ok(model, guide, elbo)
def model(data): loc = pyro.param("loc", ops.tensor(0.0)) pyro.sample("x", dist.Normal(loc, 1.), obs=data)
def model(data): p = pyro.param("p", ops.tensor(0.5)) pyro.sample("x", dist.Bernoulli(p), obs=data)
def model(data=None): loc = pyro.param("loc", ops.tensor(2.0)) scale = pyro.param("scale", ops.tensor(1.0)) with pyro.plate("data", 1000, dim=-1): x = pyro.sample("x", dist.Normal(loc, scale), obs=data) return x
def model(data=None): loc = pyro.param("loc", ops.tensor(2.0)) scale = pyro.param("scale", ops.tensor(1.0)) x = pyro.sample("x", dist.Normal(loc, scale), obs=data) return x
def guide(): loc = pyro.param("loc", ops.tensor(0.)) x = pyro.sample("x", dist.Normal(loc, 1.)) pyro.sample("y", dist.Normal(x, 1.))
def model(): locs = pyro.param("locs", ops.tensor([-1., 0., 1.])) with pyro.plate("plate", len(data), dim=-1): x = pyro.sample("x", dist.Categorical(ops.ones(3) / 3)) pyro.sample("obs", dist.Normal(locs[x], 1.), obs=data)
def guide(): loc = pyro.param("loc", ops.tensor(0.)) scale = pyro.param("scale", ops.tensor(1.)) with pyro.plate("plate_outer", data.shape[-1], dim=-1): pyro.sample("x", dist.Normal(loc, scale))
def model(): loc = ops.tensor(3.0) with pyro.plate("plate_outer", data.shape[-1], dim=-1): x = pyro.sample("x", dist.Normal(loc, 1.)) with pyro.plate("plate_inner", data.shape[-2], dim=-2): pyro.sample("y", dist.Normal(x, 1.), obs=data)
def guide(): p = pyro.param("p", ops.tensor([0.5, 0.3, 0.2])) with pyro.plate("plate", len(data), dim=-1): pyro.sample("x", dist.Categorical(p))
def model(): locs = pyro.param("locs", ops.tensor([0.2, 0.3, 0.5])) p = ops.tensor([0.2, 0.3, 0.5]) with pyro.plate("plate", len(data), dim=-1): x = pyro.sample("x", dist.Categorical(p)) pyro.sample("obs", dist.Normal(locs[x], 1.), obs=data)