This is my model.
Data size is about 30k, and it is circular data.
with pm.Model() as model:
kappa_1 = pm.Gamma('kappa_1', 1., 1., )
mu_1 = pm.VonMises('mu_1', mu=0, kappa=0.5)
component1 = pm.VonMises.dist(mu=mu_1, kappa=kappa_1)
kappa_2 = pm.Gamma('kappa_2', 1., 1., )
mu_2 = pm.VonMises('mu_2', mu=np.pi, kappa=0.5)
component2 = pm.VonMises.dist(mu=mu_2, kappa=kappa_2)
w = pm.Dirichlet('w', np.ones_like([1., 1., ]))
vm = pm.Mixture('vm', w=w, comp_dists=[component1, component2, ],
observed=data.values, )
with model:
fullrank = pm.FullRankADVI()
tracker = pm.callbacks.Tracker(
mean = fullrank.approx.mean.eval, # callable that returns mean
std = fullrank.approx.std.eval # callable that returns std
)
approx = fullrank.fit(100000, callbacks=[tracker])
pm.save_trace(trace=approx.sample(100), directory="test", overwrite=True)
trace = pm.load_trace("test", model=model)
# returns 'NoneType' object is not iterable
pymc3:3.7
I found out that this is some kind of memory problem.
Elapsed time is very short but it took few minutes for the plot to appear in my jupyter notebook.
Increasing sampling number to approx.sample(10000) returned MemoryError.
This didn’t happen in pymc3 3.6.0.
import time
pm.traceplot(approx.sample(1000))
start = time.time()
elapsed_time = time.time() - start
print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")
# elapsed_time:0.0029921531677246094[sec]
pymc3:3.6
Plots appeared in few seconds.
import time
pm.traceplot(approx.sample(1000))
start = time.time()
elapsed_time = time.time() - start
print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")
# elapsed_time:0.0[sec]