print(sample) # Print samples from single variable x_sample = x.get_sample(10) print(x_sample) # Print samples conditional on an input in_sample = model.get_sample(10, input_values={mu: 100.}) print(in_sample) # # Generate data data = x_real._get_sample(number_samples=50) # Observe data x.observe(data[x_real][:, 0, :]) # Variational model Qnu = LogNormalVariable(0., 1., "nu", learnable=True) Qmu = NormalVariable(0., 1., "mu", learnable=True) model.set_posterior_model(ProbabilisticModel([Qmu, Qnu])) # Inference inference.stochastic_variational_inference(model, number_iterations=100, number_samples=50, optimizer=chainer.optimizers.Adam(0.1)) loss_list = model.diagnostics["loss curve"] # print posterior sample post_samples = model.get_posterior_sample(10) print(post_samples)
#Generate data data = y.get_sample(20, input_values={z1: 1, z2: 0}) data.hist(bins=20) plt.show() #Observe data y.observe(data) #Variational Model Qz1 = BernulliVariable(logits=0., name="z1", learnable=True) Qz2 = BernulliVariable(logits=0., name="z2", learnable=True) variational_model = ProbabilisticModel([Qz1, Qz2]) model.set_posterior_model(variational_model) # Joint-contrastive inference inference.perform_inference( model, inference_method=ReverseKL(gradient_estimator=Taylor1Estimator), number_iterations=600, number_samples=20, optimizer="SGD", lr=0.001) loss_list = model.diagnostics["loss curve"] #Plot results plt.plot(loss_list) plt.show() #Plot posterior model.get_posterior_sample(200).hist(bins=20) plt.show()
# Observe data noise_level = 0.2 data = np.sin(2 * np.pi * 0.4 * x_range) + noise_level * np.random.normal( 0., 1., (1, num_datapoints)) y.observe(data) #Variational Model Qf = Normal(loc=np.zeros((num_datapoints, )), scale=2., name="f(x)", learnable=True) variational_model = ProbabilisticModel([Qf]) model.set_posterior_model(variational_model) # Inference inference.perform_inference(model, number_iterations=2000, number_samples=20, optimizer='SGD', lr=0.00001) loss_list = model.diagnostics["loss curve"] plt.plot(loss_list) plt.show() # Posterior posterior_samples = model.get_posterior_sample(8000)["f(x)"] posterior_mean = posterior_samples.mean() plt.plot(x_range, posterior_mean) plt.scatter(x_range, data, color="k") plt.show()