@@ -160,7 +160,7 @@ def advi(vars=None, start=None, model=None, n=5000, accurate_elbo=False,
160
160
if n < 10 :
161
161
progress .set_description ('ELBO = {:,.5g}' .format (elbos [i ]))
162
162
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 ])
164
164
progress .set_description ('Average ELBO = {:,.5g}' .format (avg_elbo ))
165
165
166
166
if i % eval_elbo == 0 :
@@ -193,14 +193,14 @@ def advi(vars=None, start=None, model=None, n=5000, accurate_elbo=False,
193
193
pm ._log .info ('Interrupted at {:,d} [{:.0f}%]: ELBO = {:,.5g}' .format (
194
194
i , 100 * i // n , elbos [i ]))
195
195
else :
196
- avg_elbo = elbos [i - n // 10 :i ]. mean ( )
196
+ avg_elbo = infmean ( elbos [i - n // 10 :i ])
197
197
pm ._log .info ('Interrupted at {:,d} [{:.0f}%]: Average ELBO = {:,.5g}' .format (
198
198
i , 100 * i // n , avg_elbo ))
199
199
else :
200
200
if n < 10 :
201
201
pm ._log .info ('Finished [100%]: ELBO = {:,.5g}' .format (elbos [- 1 ]))
202
202
else :
203
- avg_elbo = elbos [- n // 10 :]. mean ( )
203
+ avg_elbo = infmean ( elbos [- n // 10 :])
204
204
pm ._log .info ('Finished [100%]: Average ELBO = {:,.5g}' .format (avg_elbo ))
205
205
finally :
206
206
progress .close ()
@@ -410,3 +410,8 @@ def rvs(x):
410
410
trace .record (point )
411
411
412
412
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 )])
0 commit comments