I am working on a model that uses a custom point process, and I need to pass some tf variables and Edward distributions, and get a log probability in return to train upon it using KL methods. I do not need to sample from the stochastic process, but just need its log likelihood for training. How do I add that functionality in the class code? I used the function
_log_prob to return the log likelihood, but it doesn’t seem to work.
So it sounds like the final step in your model is a custom probability distribution, rather than one of the built in tf ones that edward alias into
In that case, you’ll need to subclass
tf.Distribution and implement both
_log_prob, then use that to create a
RandomVariable class. Even though you’re not sampling from it, Edward needs
sample to create a tensor representation of the distribution, which it uses for inference.
Hard to be more specific without a code sample though.
Thank you for replying! It seems that I was naive to just implement an overloading function for
_log_prob in the edward custom RV class. The log probability is the only value I need for training, and all the variables used in it are essentially either tensors or Edward distributions, which are passed int the
__init__ function in my class. I used Edward only to refrain from hardcoding VB updates for the graphical model. I guess I will have to write a custom TF class for the process anyway, if that is what you meant to say?