PyAutoFit icon indicating copy to clipboard operation
PyAutoFit copied to clipboard

Issue with EP and Uniform Priors

Open Jammy2211 opened this issue 3 years ago • 2 comments

The following tutorial prints the following errors when using EP:

https://github.com/Jammy2211/autofit_workspace/blob/master/scripts/howtofit/chapter_graphical_models/tutorial_3_expectation_propagation.py

2021-12-02 19:46:48,144 - autofit.graphical.mean_field - ERROR - nan parameter passed to UniformPrior
Traceback (most recent call last):
  File "/mnt/c/Users/Jammy/Code/PyAuto/PyAutoFit/autofit/graphical/mean_field.py", line 444, in project_mean_field
    factor_dist = model_dist / self.cavity_dist
  File "/mnt/c/Users/Jammy/Code/PyAuto/PyAutoFit/autofit/graphical/mean_field.py", line 214, in __truediv__
    return type(self)({
  File "/mnt/c/Users/Jammy/Code/PyAuto/PyAutoFit/autofit/graphical/mean_field.py", line 215, in <dictcomp>
    k: m / other.get(k, 1.) for k, m in self.items()},
  File "/mnt/c/Users/Jammy/Code/PyAuto/PyAutoFit/autofit/messages/transform_wrapper.py", line 103, in __truediv__
    return self._new_for_base_message(
  File "/mnt/c/Users/Jammy/Code/PyAuto/PyAutoFit/autofit/mapper/prior/prior.py", line 59, in _new_for_base_message
    return type(self)(
  File "/mnt/c/Users/Jammy/Code/PyAuto/PyAutoFit/autofit/mapper/prior/prior.py", line 78, in __init__
    raise exc.MessageException(
autofit.exc.MessageException: nan parameter passed to UniformPrior

This does not happen for GaussianPriors so m ost likely a transofrmation.

Jammy2211 avatar Dec 02 '21 19:12 Jammy2211

The script ultimately crashes with this error:

Traceback (most recent call last):
  File "scripts/howtofit/chapter_graphical_models/tutorial_3_expectation_propagation.py", line 177, in <module>
    collection = factor_graph.optimise(
  File "/mnt/c/Users/Jammy/Code/PyAuto/PyAutoFit/autofit/graphical/declarative/abstract.py", line 137, in optimise
    updated_model = opt.run(
  File "/mnt/c/Users/Jammy/Code/PyAuto/PyAutoFit/autofit/graphical/expectation_propagation/optimiser.py", line 228, in run
    model_approx, status = optimiser.optimise(
  File "/mnt/c/Users/Jammy/Code/PyAuto/PyAutoFit/autofit/non_linear/abstract_search.py", line 286, in optimise
    result.projected_model.priors
  File "/mnt/c/Users/Jammy/Code/PyAuto/PyAutoFit/autofit/non_linear/result.py", line 107, in projected_model
    arguments = {
  File "/mnt/c/Users/Jammy/Code/PyAuto/PyAutoFit/autofit/non_linear/result.py", line 108, in <dictcomp>
    prior: prior.project(
  File "/mnt/c/Users/Jammy/Code/PyAuto/PyAutoFit/autofit/messages/transform_wrapper.py", line 56, in project
    self.transformed_wrapper.project(
  File "/mnt/c/Users/Jammy/Code/PyAuto/PyAutoFit/autofit/messages/abstract.py", line 360, in project
    assert np.isfinite(suff_stats).all()
AssertionError

Jammy2211 avatar Dec 02 '21 19:12 Jammy2211

In the to_canonical_form method when samples are transformed for a UniformNormalMessage the result is nans.

Any ideas @matthewghgriffiths ?

rhayes777 avatar Dec 15 '21 12:12 rhayes777