Using custom log probability for custom model


#1

Hi all,
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.


#2

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 RandomVariables.

In that case, you’ll need to subclass tf.Distribution and implement both _sample_n and _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.


#3

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?