return log_prior + log_lik def build_toy_dataset(N): pi = np.array([0.4, 0.6]) mus = [[1, 1], [-1, -1]] stds = [[0.1, 0.1], [0.1, 0.1]] x = np.zeros((N, 2), dtype=np.float32) for n in range(N): k = np.argmax(np.random.multinomial(1, pi)) x[n, :] = np.random.multivariate_normal(mus[k], np.diag(stds[k])) return x ed.set_seed(42) x_train = build_toy_dataset(500) K = 2 D = 2 model = MixtureGaussian(K, D) qpi = PointMass(params=ed.to_simplex(tf.Variable(tf.random_normal([K - 1])))) qmu = PointMass(params=tf.Variable(tf.random_normal([K * D]))) qsigma = PointMass(params=tf.exp(tf.Variable(tf.random_normal([K * D])))) data = {'x': x_train} inference = ed.MAP({'pi': qpi, 'mu': qmu, 'sigma': qsigma}, data, model) inference.run(n_iter=500, n_minibatch=10)
return log_prior + log_lik def build_toy_dataset(N): pi = np.array([0.4, 0.6]) mus = [[1, 1], [-1, -1]] stds = [[0.1, 0.1], [0.1, 0.1]] x = np.zeros((N, 2), dtype=np.float32) for n in range(N): k = np.argmax(np.random.multinomial(1, pi)) x[n, :] = np.random.multivariate_normal(mus[k], np.diag(stds[k])) return x ed.set_seed(42) x_train = build_toy_dataset(500) K = 2 D = 2 model = MixtureGaussian(K, D) with tf.variable_scope("posterior"): qpi = PointMass(params=ed.to_simplex(tf.Variable(tf.random_normal([K - 1])))) qmu = PointMass(params=tf.Variable(tf.random_normal([K * D]))) qsigma = PointMass(params=tf.exp(tf.Variable(tf.random_normal([K * D])))) data = {"x": x_train} inference = ed.Laplace({"pi": qpi, "mu": qmu, "sigma": qsigma}, data, model) inference.run(n_iter=500, n_minibatch=10)