Esempio n. 1
0
except:
    pass
nsamples = 5
samples = torch.linspace(-20,20,nsamples).reshape(-1,1)
#Just initiate with large mean and covariance
mu0 = torch.zeros(dim)
cov0 = (20.0/3)**2*torch.ones(dim)
#%% The main training class is initiated, it's gp model optimized,
#   and initial component set
vb = VariationalBoosting(dim,logjoint,samples,mu0,cov0,
                         kernel_function="PMat",
                         matern_coef=2.5,
                         degree_hermite=60)
vb.optimize_bmc_model(maxiter=100,verbose=False)
#%% Tracking devices
vb.save_distribution("%s/distrib%i"%(folder_name,0))
nplot = 201
delta_x = torch.linspace(-20,20,nplot)
delta_x_np = delta_x.flatten().numpy()
tp_np = (logjoint(delta_x.reshape(-1,1)).cpu()).flatten().numpy()
prediction_np = (vb.bmcmodel.prediction(delta_x.reshape(-1,1),cov="none")*vb.evals_std + vb.evals_mean).\
                numpy().astype(float)        
dmeans = [torch.norm(vb.currentq_mean.to("cpu")-true_mean).numpy()]
dcovs = [torch.norm(vb.currentq_mean.to("cpu")-true_cov,2).numpy()]
elbo_list = [vb.evidence_lower_bound(nsamples=10000).cpu().numpy()]
step_list = [0]
time_list = [0]
vbp_list = []
vbp = vb.current_logq(delta_x.reshape(-1,1)).cpu().flatten().numpy().astype(float)
vbp_list.append(vbp)
Esempio n. 2
0
acquisition = "prospective" #Acquisition function

#Initialize algorithm
vb = VariationalBoosting(dim,logjoint,samples,mu0,cov0)
vb.optimize_bmc_model() #Optimize GP model
vb.update_full() #Fit first component

#Training loop
for i in range(100):
    _ = vb.update() #Choose new boosting component
    vb.update_bmcmodel(acquisition=acquisition) #Choose new evaluation
    vb.cutweights(1e-3) #Weights prunning
    if ((i+1)%20) == 0:
        vb.update_full(cutoff=1e-3) #Joint parameter updating

vb.save_distribution("finaldistrib") #Save distribution
#%%
import math
distrib = torch.load("finaldistrib")
nplot = 21
x,y = torch.linspace(-6,6,nplot),torch.linspace(-6,6,nplot)
X,Y = torch.meshgrid(x,y)
Z1 = logjoint(torch.stack([X,Y],dim=-1).reshape(-1,2)).reshape(*X.shape)-\
        2*math.log(math.pi)
Z2 = distrib.logprob(torch.stack([X,Y],dim=-1).reshape(-1,2)).reshape(*X.shape)
#%%
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import rcParams
rcParams.update({'figure.autolayout': True})
fig1 = plt.figure()
Esempio n. 3
0
        elapsed = tictoc.toc(printing=False)
        dmeans.append(torch.norm(vb.currentq_mean.cpu() - true_mean).numpy())
        dcovs.append(np.linalg.norm(vb.currentq_cov.cpu() - true_cov))
        mmds.append(mmd_vb_sampler(vb, sampler, 100000))
        elbo_list.append(vb.evidence_lower_bound(nsamples=10000).cpu().numpy())
        step_list.append(i + 1)
        time_list.append(elapsed)
        print(dmeans[-1])
        print(dcovs[-1])
        print(elbo_list[-1])
        print(time_list[-1])
        print("Step %i" % (i + 1), dim)

    dmeans_np = np.array(dmeans).astype(float)
    dcovs_np = np.array(dcovs).astype(float)
    elbo_np = np.array(elbo_list).astype(float)
    mmds_np = np.array(mmds)
    step_list_np = np.array(step_list).astype(int)
    samples_np = vb.samples.numpy()
    evaluations_np = vb.evaluations.numpy()
    np.savez("%s/tracking" % folder_name,
             means=dmeans_np,
             covs=dcovs_np,
             mmds=mmds_np,
             true_mean=true_mean.numpy(),
             true_cov=true_cov.numpy(),
             elbo=elbo_np,
             steps=step_list_np)
    np.savez("%s/distribdata" % folder_name, A=A.numpy())
    vb.save_distribution("%s/vbdistrib" % folder_name)
Esempio n. 4
0
 #Just initiate with large mean and covariance
 mu0 = torch.zeros(dim)
 cov0 = (20.0 / 3)**2 * torch.ones(dim)
 #%% The main training class is initiated, it's gp model optimized,
 #   and initial component set
 vb = VariationalBoosting(dim,
                          logjoint,
                          samples,
                          mu0,
                          cov0,
                          kernel_function="PMat",
                          matern_coef=2.5,
                          degree_hermite=60)
 vb.optimize_bmc_model(maxiter=100, verbose=False)
 #%% Tracking devices
 vb.save_distribution("ex2a_jopt%i_data/distrib%i" % (jointopt_interval, 0))
 nplot = 201
 delta_x = torch.linspace(-20, 20, nplot)
 delta_x_np = delta_x.flatten().numpy()
 tp_np = (logjoint(delta_x.reshape(-1, 1)).cpu()).flatten().numpy()
 prediction_np = (vb.bmcmodel.prediction(delta_x.reshape(-1,1),cov="none")*vb.evals_std + vb.evals_mean).\
                 numpy().astype(float)
 dmeans = [torch.norm(vb.currentq_mean.to("cpu") - true_mean).numpy()]
 dcovs = [torch.norm(vb.currentq_mean.to("cpu") - true_cov, 2).numpy()]
 elbo_list = [vb.evidence_lower_bound(nsamples=10000).cpu().numpy()]
 step_list = [0]
 time_list = [0]
 vbp_list = []
 vbp = vb.current_logq(delta_x.reshape(
     -1, 1)).cpu().flatten().numpy().astype(float)
 vbp_list.append(vbp)