Make Predictive work with the SplitReparam reparameterizer [bugfix] #3388
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
Using
pyro.infer.Predictive
with a model that utilizes thepyro.infer.reparam.SplitReparam
reparameterizer raises an error aspyro.infer.Predictive
tries to sample from the model in order to determine site shapes.Straightforward sampling of a model that utilizes the
pyro.infer.reparam.SplitReparam
reparameterizer is not possible as this reparameterizer introduces sites with thepyro.distributions.ImproperUniform
distribution, which does not support sampling.Solution
Wrap the model with the
pyro.poutine.InitMessenger
effect handler during the site shapes determination phase. This solves the problem as thepyro.poutine.InitMessenger
effect handler assigns values to thepyro.distributions.ImproperUniform
sites before they are sampled.This is a specific feature of
pyro.poutine.ReparamMessenger
, which applies initialization bypyro.poutine.InitMessenger
before sampling, even if it appears last in the messenger stack (see #2876).Testing
The fix can be verified by running