Evaluating Edward models continuously after each update


#1

I have seen that log-likelihood plots are used to represent the convergence of the Bayesian models. I tried to implement the same thing using Edward. Assume that if I want to plot log-likelihood with respect to number of iterations for Bayesian inference.

for i in range(n_iter):
    # model inference
    inference.update(X : train_X, y : train_y)
    # model evaluation
    y_post = ed.copy(y, {w:qw, b:qb}
    ed.evaluate('log_likelihood', data {X: test_X, y_post:test_y})

I have used a held-out set to evaluate the model. The logic seems to works perfectly, but the performance of the inference + model evaluation decay with the time. I assume that this is due to some additional nodes added to the tensorflow graph during call of ed.evaluate.

Is there anyway to prevent this performance decay with time, because if model criticism is a performance bottleneck then we loose the motivation for using VI frameworks (which is constructing and evaluating models much faster).

It should be noted that I observed the same performance decay when we try to perform predictions after each update to the model. Even though Edward is much faster in terms of inference, it will be useless with real-world applications, if the performance decay with number of time that the predictions are made.

Thanks in advance !