Skip to content

Commit f2f82b5

Browse files
pstjohntwiecki
authored andcommitted
Don't include -np.inf in calculating average ELBO (#1880)
* Adds an infmean for advi reporting * fixing typo
1 parent 679b291 commit f2f82b5

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

pymc3/variational/advi.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ def advi(vars=None, start=None, model=None, n=5000, accurate_elbo=False,
160160
if n < 10:
161161
progress.set_description('ELBO = {:,.5g}'.format(elbos[i]))
162162
elif i % (n // 10) == 0 and i > 0:
163-
avg_elbo = elbos[i - n // 10:i].mean()
163+
avg_elbo = infmean(elbos[i - n // 10:i])
164164
progress.set_description('Average ELBO = {:,.5g}'.format(avg_elbo))
165165

166166
if i % eval_elbo == 0:
@@ -193,14 +193,14 @@ def advi(vars=None, start=None, model=None, n=5000, accurate_elbo=False,
193193
pm._log.info('Interrupted at {:,d} [{:.0f}%]: ELBO = {:,.5g}'.format(
194194
i, 100 * i // n, elbos[i]))
195195
else:
196-
avg_elbo = elbos[i - n // 10:i].mean()
196+
avg_elbo = infmean(elbos[i - n // 10:i])
197197
pm._log.info('Interrupted at {:,d} [{:.0f}%]: Average ELBO = {:,.5g}'.format(
198198
i, 100 * i // n, avg_elbo))
199199
else:
200200
if n < 10:
201201
pm._log.info('Finished [100%]: ELBO = {:,.5g}'.format(elbos[-1]))
202202
else:
203-
avg_elbo = elbos[-n // 10:].mean()
203+
avg_elbo = infmean(elbos[-n // 10:])
204204
pm._log.info('Finished [100%]: Average ELBO = {:,.5g}'.format(avg_elbo))
205205
finally:
206206
progress.close()
@@ -410,3 +410,8 @@ def rvs(x):
410410
trace.record(point)
411411

412412
return MultiTrace([trace])
413+
414+
415+
def infmean(input_array):
416+
"""Return the mean of the finite values of the array"""
417+
return np.mean(np.asarray(input_array)[np.isfinite(input_array)])

pymc3/variational/advi_minibatch.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import pymc3 as pm
1111
from pymc3.theanof import reshape_t, inputvars, floatX
12-
from .advi import ADVIFit, adagrad_optimizer, gen_random_state
12+
from .advi import ADVIFit, adagrad_optimizer, gen_random_state, infmean
1313

1414
__all__ = ['advi_minibatch']
1515

@@ -529,7 +529,7 @@ def is_shared(t):
529529
if n < 10:
530530
progress.set_description('ELBO = {:,.2f}'.format(elbos[i]))
531531
elif i % (n // 10) == 0 and i > 0:
532-
avg_elbo = elbos[i - n // 10:i].mean()
532+
avg_elbo = infmean(elbos[i - n // 10:i])
533533
progress.set_description('Average ELBO = {:,.2f}'.format(avg_elbo))
534534

535535
pm._log.info('Finished minibatch ADVI: ELBO = {:,.2f}'.format(elbos[-1]))

0 commit comments

Comments
 (0)