Example #1
0
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
        }
    }
Example #2
0
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}}
Example #3
0
 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)
Example #4
0
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)
Example #5
0
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)
Example #6
0
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)
Example #7
0
 def model(data):
     loc = pyro.param("loc", ops.tensor(0.0))
     pyro.sample("x", dist.Normal(loc, 1.), obs=data)
Example #8
0
 def model(data):
     p = pyro.param("p", ops.tensor(0.5))
     pyro.sample("x", dist.Bernoulli(p), obs=data)
Example #9
0
 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
Example #10
0
 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
Example #11
0
 def guide():
     loc = pyro.param("loc", ops.tensor(0.))
     x = pyro.sample("x", dist.Normal(loc, 1.))
     pyro.sample("y", dist.Normal(x, 1.))
Example #12
0
 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)
Example #13
0
 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))
Example #14
0
 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)
Example #15
0
 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))
Example #16
0
 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)