Hello,
I’m using the tutorial of using a self-written guide for a bayesian regression, (Bayesian Regression - Inference Algorithms (Part 2) — Pyro Tutorials 1.8.4 documentation) adapted to my data. Essentially, it’s a simple
When I run nuts_kernel = NUTS(model_g)
I get the following error:
Traceback (most recent call last):
File "<ipython-input-20-f21e6b5ce4f8>", line 1, in <module>
nuts_kernel = NUTS(model_g)
File "C:\Users\JORDAN.HOWELL.GITDIR\AppData\Local\Continuum\anaconda3\envs\torch_env\lib\site-packages\pyro\infer\mcmc\nuts.py", line 148, in __init__
init_strategy=init_strategy)
File "C:\Users\JORDAN.HOWELL.GITDIR\AppData\Local\Continuum\anaconda3\envs\torch_env\lib\site-packages\pyro\infer\mcmc\hmc.py", line 112, in __init__
raise ValueError("Only one of `model` or `potential_fn` must be specified.")
ValueError: Only one of `model` or `potential_fn` must be specified.
I thought i may have a model on CPU and GPU and that may be throwing the error so i restarted my kernel and got the same thing. Is this error indicative of some other error? Model code below:
def model(x, y):
a = pyro.sample("mean", dist.Normal(0., 10.))
b = pyro.sample("edit_coeff", dist.Normal(0., 1.))
sigma = pyro.sample("sigma", dist.Uniform(0., 10.))
mean = a + b * x
rate = mean.exp()
with pyro.plate("data", len(x)):
pyro.sample("obs", dist.Poisson(rate, sigma), obs=y)
def guide(x, y):
a_loc = pyro.param('a_mean', torch.tensor(0.))
a_scale = pyro.param('a_std', torch.tensor(1.),
constraint=constraints.positive)
sigma_loc = pyro.param('sigma_loc', torch.tensor(1.),
constraint=constraints.positive)
weights_loc = pyro.param('weights_loc', torch.randn(3))
weights_scale = pyro.param('weights_scale', torch.ones(3),
constraint=constraints.positive)
a = pyro.sample("a", dist.Normal(a_loc, a_scale))
b = pyro.sample("edit_coeff", dist.Normal(weights_loc[0], weights_scale[0]))
sigma = pyro.sample("sigma", dist.Normal(sigma_loc, torch.tensor(0.05)))
mean = a + b * x
def summary(samples):
site_stats = {}
for site_name, values in samples.items():
marginal_site = pd.DataFrame(values)
describe = marginal_site.describe(percentiles=[.05, 0.25, 0.5, 0.75, 0.95]).transpose()
site_stats[site_name] = describe[["mean", "std", "5%", "25%", "50%", "75%", "95%"]]
return site_stats
model_g = model(x.cuda(), y.cuda())
nuts_kernel = NUTS(model_g) #model throws error here
mcmc = MCMC(nuts_kernel, num_samples = 1500, warmup_steps = 500)
mcmc.run(x.cuda(), y.cuda())
hmc_samples = {k: v.detach().cpu().numpy() for k, v in mcmc.get_samples().items()}