Hi all,
I am new to Bayesian inference via Edward. I am implementing a Poisson-gamma regression in Edward. I compiled my Edward’s model. However, I have been unsuccessful with running Variational Bayes inference in Edward. Here is a snippet of code with the error that I’m getting:
N = 120
M = 5
x_train = np.reshape(z[:N], (N, 1))
y_train = np.reshape(w[:N], (N, 1))
t_train = np.reshape(range(N), (N, 1))
s_train = np.array([[12.0], [36.0], [60.0], [84.0], [108.0]])
X = tf.placeholder(tf.float32, [N, 1])
t = tf.placeholder(tf.float32, [N, 1])
s = tf.placeholder(tf.float32, [M, 1])
# Define priors
theta = Normal(mu=tf.zeros(1), sigma=tf.ones(1))
theta_star = Normal(mu=tf.zeros(1), sigma=tf.ones(1))
nu0 = Normal(mu=tf.ones(1)*1.5, sigma=tf.ones(1))
nu1 = Normal(mu=tf.ones(1)*2.0, sigma=tf.ones(1))
alpha_ = tf.exp(nu0)
beta_ = tf.exp(nu1)
gamma = Gamma(alpha=tf.ones([M, 1])*alpha_, beta=tf.ones([M, 1])*beta_)
def Kernel(t, s):
mat = []
for i in range(N):
mat += [[]]
for j in range(M):
mat[i] += [1.2*tf.exp(-0.25*tf.pow(t[i] - s[j], 2))]
mat[i] = tf.stack(mat[i])
return tf.reshape(tf.stack(mat), [N, M])
# Poisson intensity
mu = theta*X + theta_star*tf.matmul(Kernel(t, s), gamma)
# Define likelihood
y = Poisson(lam=mu, value=tf.zeros_like(mu))
qtheta = Normal(mu=tf.Variable(tf.random_normal([1])),
sigma=tf.nn.softplus(tf.Variable(tf.random_normal([1]))))
qtheta_star = Normal(mu=tf.Variable(tf.random_normal([1])),
sigma=tf.nn.softplus(tf.Variable(tf.random_normal([1]))))
# qnu0 = Normal(mu=tf.Variable(tf.random_normal([1])), sigma=tf.nn.softplus(tf.Variable(tf.random_normal([1]))))
# qnu1 = Normal(mu=tf.Variable(tf.random_normal([1])), sigma=tf.nn.softplus(tf.Variable(tf.random_normal([1]))))
# qgamma = Gamma(alpha=tf.nn.softplus(tf.Variable(tf.random_normal([M, 1]))), beta=tf.nn.softplus(tf.Variable(tf.random_normal([M, 1]))))
inference = ed.KLqp({theta: qtheta, theta_star: qtheta_star}, data={X: x_train, t: t_train, s: s_train, y: y_train})
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
<ipython-input-48-5b104cd13dec> in <module>()
----> 1 inference = ed.KLqp({theta: qtheta, theta_star: qtheta_star}, data={X: x_train, t: t_train, s: s_train, y: y_train})
/usr/local/lib/python2.7/site-packages/edward/inferences/klqp.pyc in __init__(self, *args, **kwargs)
52 """
53 def __init__(self, *args, **kwargs):
---> 54 super(KLqp, self).__init__(*args, **kwargs)
55
56 def initialize(self, n_samples=1, kl_scaling=None, *args, **kwargs):
/usr/local/lib/python2.7/site-packages/edward/inferences/variational_inference.pyc in __init__(self, *args, **kwargs)
21 """
22 def __init__(self, *args, **kwargs):
---> 23 super(VariationalInference, self).__init__(*args, **kwargs)
24
25 def initialize(self, optimizer=None, var_list=None, use_prettytensor=False,
/usr/local/lib/python2.7/site-packages/edward/inferences/inference.pyc in __init__(self, latent_vars, data)
121 var = tf.Variable(ph, trainable=False, collections=[])
122 self.data[key] = var
--> 123 sess.run(var.initializer, {ph: value})
124 elif isinstance(value, np.number):
125 if np.issubdtype(value.dtype, np.float):
/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.pyc in run(self, fetches, feed_dict, options, run_metadata)
765 try:
766 result = self._run(None, fetches, feed_dict, options_ptr,
--> 767 run_metadata_ptr)
768 if run_metadata:
769 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)
/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.pyc in _run(self, handle, fetches, feed_dict, options, run_metadata)
963 if final_fetches or final_targets:
964 results = self._do_run(handle, final_targets, final_fetches,
--> 965 feed_dict_string, options, run_metadata)
966 else:
967 results = []
/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.pyc in _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)
1013 if handle is None:
1014 return self._do_call(_run_fn, self._session, feed_dict, fetch_list,
-> 1015 target_list, options, run_metadata)
1016 else:
1017 return self._do_call(_prun_fn, self._session, handle, feed_dict,
/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.pyc in _do_call(self, fn, *args)
1033 except KeyError:
1034 pass
-> 1035 raise type(e)(node_def, op, message)
1036
1037 def _extend_graph(self):
InvalidArgumentError: Node 'inference_15065146640/0/Variable_24/read': Unknown input node 'Variable_24'