# Nan in summary histogram for: gradient

**URL:** <https://discourse.edwardlib.org/t/nan-in-summary-histogram-for-gradient/174>\
**Category:** General\
**Created:** [June 14, 2017, 12:20pm UTC](https://discourse.edwardlib.org/t/nan-in-summary-histogram-for-gradient/174 "2017-06-14T12:20:41Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![AngelBerihuete](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.edwardlib.org/angelberihuete/32/27_2.png) [@AngelBerihuete](https://discourse.edwardlib.org/u/AngelBerihuete)\
**Post date:** [June 14, 2017, 12:20pm UTC](https://discourse.edwardlib.org/t/nan-in-summary-histogram-for-gradient/174/1 "2017-06-14T12:20:41Z")

</div>

Dear Edward’s users.

I obtain (randomly) the following message using inference with KLqp

```
InvalidArgumentError (see above for traceback): Nan in summary histogram for: gradient/posterior/qmu_loc/0
         [[Node: gradient/posterior/qmu_loc/0 = HistogramSummary[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"](gradient/posterior/qmu_loc/0/tag, gradients/AddN_27)]]

```

I’ve read [something](https://stackoverflow.com/questions/39854390/nan-in-summary-histogram) about decreasing the learning rate, but I don’t know how to put this option inside of inference:

`inference.run(n_samples=5, n_iter=250, logdir='log2DMH')`

---

<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:** [June 14, 2017, 8:06pm UTC](https://discourse.edwardlib.org/t/nan-in-summary-histogram-for-gradient/174/2 "2017-06-14T20:06:46Z")

</div>

You can pass in your own optimizer and lower its learning rate.

```python
learning_rate = 1e-3
optimizer = tf.train.AdamOptimizer(learning_rate)
inference.initialize(..., optimizer=optimizer)

```

---

<div class="post-metadata">

**Author:** ![AngelBerihuete](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.edwardlib.org/angelberihuete/32/27_2.png) [@AngelBerihuete](https://discourse.edwardlib.org/u/AngelBerihuete)\
**Post date:** [June 15, 2017, 7:21am UTC](https://discourse.edwardlib.org/t/nan-in-summary-histogram-for-gradient/174/3 "2017-06-15T07:21:59Z")

</div>

Hi Dustin! Many thanks! I had changes in the results.

Now I want understand why using a learning\_rate = 1e-3 we obtain Loss: nan, but using learning\_rate = 1e-2, we obtain Loss 18073.822. I’ll check the bibliography at [Classes of Inference](http://edwardlib.org/api/inference-classes):

_KLqp supports_

_1. score function gradients (Paisley et al., 2012)_  
_2. reparameterization gradients (Kingma and Welling, 2014)_

_of the loss function._

```
learning_rate = 1e-3
optimizer = tf.train.AdamOptimizer(learning_rate)
inference.initialize(n_samples=5, n_iter=250, logdir='log2DMH', optimizer=optimizer)
inference.run()
1000/1000 [100%] ██████████████████████████████ Elapsed: 1s | Loss: nan    
learning_rate = 1e-2
optimizer = tf.train.AdamOptimizer(learning_rate)
inference.initialize(n_samples=5, n_iter=250, logdir='log2DMH', optimizer=optimizer)
inference.run()
1000/1000 [100%] ██████████████████████████████ Elapsed: 1s | Loss: 18073.822

```

---- EDIT ----  
It was my fault! I forgot to do fine control of training procedure! Things are much better now.

```
learning_rate = 1e-3
optimizer = tf.train.AdamOptimizer(learning_rate)
inference.initialize(n_samples=30, n_iter=5000, logdir='log2DMH', optimizer=optimizer)
tf.global_variables_initializer().run()

for _ in range(inference.n_iter):
  info_dict = inference.update()
  inference.print_progress(info_dict)

inference.finalize()
```
