# Poisson distribution

**URL:** <https://discourse.edwardlib.org/t/poisson-distribution/70>\
**Category:** General\
**Created:** [April 5, 2017, 6:14pm UTC](https://discourse.edwardlib.org/t/poisson-distribution/70 "2017-04-05T18:14:53Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![krstovski](https://avatars.discourse-cdn.com/v4/letter/k/46a35a/32.png) [@krstovski](https://discourse.edwardlib.org/u/krstovski)\
**Post date:** [April 5, 2017, 6:14pm UTC](https://discourse.edwardlib.org/t/poisson-distribution/70/1 "2017-04-05T18:14:53Z")

</div>

I would like to use a Poisson distribution in my model. How do I go about doing that?  
I’ve tried the following syntax:  
Poisson(lam=tf.exp(eta))

---

<div class="post-metadata">

**Author:** ![dustin](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.edwardlib.org/dustin/32/134_2.png) [@dustin](https://discourse.edwardlib.org/u/dustin)\
**Post date:** [April 5, 2017, 10:46pm UTC](https://discourse.edwardlib.org/t/poisson-distribution/70/2 "2017-04-05T22:46:04Z")

</div>

TensorFlow implemented Poisson sampling in the TensorFlow r1.1 pre-release (you can install it via `pip install --pre tensorflow`). This is the most immediate solution. That said, TensorFlow r1.1 made major backwards incompatible changes to distributions, such as a move from greek arguments to english-based arguments. For example, it is now `Poisson(rate=tf.exp(eta))` and not `lam=`. To use TensorFlow r1.1 with Edward, see [https://github.com/blei-lab/edward/pull/452](https://github.com/blei-lab/edward/pull/452).

If you prefer not to use a development version of TensorFlow and Edward, there are two other options, described in the Advanced Settings section of [http://edwardlib.org/api/model-development](http://edwardlib.org/api/model-development). One is to implement your own Poisson sampling. The other option is if you only use the Poisson as a likelihood function (and you use inference algs that don’t require sampling from the likelihood); then use the `value` argument to fix the associated tensor to some value.

---

<div class="post-metadata">

**Author:** ![krstovski](https://avatars.discourse-cdn.com/v4/letter/k/46a35a/32.png) [@krstovski](https://discourse.edwardlib.org/u/krstovski)\
**Post date:** [April 10, 2017, 6:27pm UTC](https://discourse.edwardlib.org/t/poisson-distribution/70/3 "2017-04-10T18:27:24Z")

</div>

I’m getting “strange” results when using the tf 1.1 implementation; i.e. Poisson(rate=tf.exp(eta))

---

<div class="post-metadata">

**Author:** ![dustin](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.edwardlib.org/dustin/32/134_2.png) [@dustin](https://discourse.edwardlib.org/u/dustin)\
**Post date:** [April 10, 2017, 6:37pm UTC](https://discourse.edwardlib.org/t/poisson-distribution/70/4 "2017-04-10T18:37:27Z")

</div>

Can you elaborate on “strange”? For example: Is the model instantiated without error? Are there any specific errors raised in the script? Or do strange results come only during the training?

If it’s the last one, are you using MAP to point mass approximate Poisson variables?

---

<div class="post-metadata">

**Author:** ![krstovski](https://avatars.discourse-cdn.com/v4/letter/k/46a35a/32.png) [@krstovski](https://discourse.edwardlib.org/u/krstovski)\
**Post date:** [April 10, 2017, 6:52pm UTC](https://discourse.edwardlib.org/t/poisson-distribution/70/5 "2017-04-10T18:52:08Z")

</div>

Strange results come only during the training. More specifically I’m getting nan values. This happens when I’m using MAP (ed.MAP).

---

<div class="post-metadata">

**Author:** ![dustin](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.edwardlib.org/dustin/32/134_2.png) [@dustin](https://discourse.edwardlib.org/u/dustin)\
**Post date:** [April 10, 2017, 7:07pm UTC](https://discourse.edwardlib.org/t/poisson-distribution/70/6 "2017-04-10T19:07:41Z")

</div>

Can you provide more details, for example, show snippets of your code, and what you’re using the Poisson for in the model? If you’re using MAP to point estimate a parameter with a Poisson prior, I’m not sure how that would work since MAP only works for differentiable latent variables.

---

<div class="post-metadata">

**Author:** ![altairmn](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.edwardlib.org/altairmn/32/308_2.png) [@altairmn](https://discourse.edwardlib.org/u/altairmn)\
**Post date:** [April 29, 2018, 7:11pm UTC](https://discourse.edwardlib.org/t/poisson-distribution/70/7 "2018-04-29T19:11:52Z")

</div>

NaN values are obtained even if the data generating process is directly dependent on a Poisson distribution. In the following code, I anticipate that the `ed.inferences.MAP` should give the same result as MLE.

```
from edward.models import Poisson

N = 10
lmb = tf.Variable(0.0, dtype=tf.float32)
x = Poisson(rate=tf.ones(N) * lmb)

inference = ed.MAP(data = {x: X_train})
inference.run()
sess = ed.get_session()
print (sess.run([lmb]))

```

It prints `[nan]`. What do you suggest should be done in this case?
