Amortized Inference
Purpose
The active amortized workflow learns a photometric posterior approximation for the controlled synthetic FENIKS/DSPS closure dataset. It combines:
an encoder
q_psi(x | flux, flux_err);the fixed DSPS decoder through
euclid_dsps.parameter_vectorsandeuclid_dsps.model;a RealNVP prior in bounded latent space;
a Student-t flux likelihood.
The production config is:
configs/amortized_diffsky_synthetic_feniks_full_gpu.yaml
FS2 is still available as a comparison config:
configs/amortized_fs2_realnvp.yaml
FENIKS Contract
configs/amortized_diffsky_synthetic_feniks_full_gpu.yaml uses the full
diffsky_dsps_closure_full schema. The latent vector has 18 parameters:
z_obs
log10_stellar_mass
diffstar_lgmcrit
diffstar_lgy_at_mcrit
diffstar_indx_lo
diffstar_indx_hi
diffstar_lg_qt
diffstar_qlglgdt
diffstar_lg_drop
diffstar_lg_rejuv
diffmah_logm0
diffmah_logtc
diffmah_early_index
diffmah_late_index
diffmah_t_peak
log10_stellar_metallicity
dust_av
dust_delta
The encoder input is the configured band vector:
[flux_1, ..., flux_B, fluxerr_1, ..., fluxerr_B]
For the 14-band FENIKS production sample, B=14 and the feature dimension is
28. The 18-band survey-like FENIKS path uses the matching 18-band config and
feature dimensions.
Feature Normalization
Fluxes are transformed as asinh(flux / flux_scale) and errors as
log(fluxerr / err_scale + eps). The scales are learned from the training
catalog and written to feature_stats.json. These normalized values are
encoder inputs only; DSPS always receives physical theta values and native
photometry units.
Prior Source
The production config uses:
amortized:
prior:
source: supervised_checkpoint
train_jointly: false
That checkpoint is produced by
configs/prior_diffsky_synthetic_feniks_full_realnvp.yaml. This keeps the
population prior learned from controlled FENIKS truth separate from the
photometric encoder training.
Run
Train:
python -m euclid_dsps.cli \
--config configs/amortized_diffsky_synthetic_feniks_full_gpu.yaml \
amortized-train-diffsky \
--out outputs/runs/amortized_diffsky_synthetic_feniks_full
Infer on the held-out split:
python -m euclid_dsps.cli \
--config configs/amortized_diffsky_synthetic_feniks_full_gpu.yaml \
amortized-infer-diffsky \
--checkpoint outputs/runs/amortized_diffsky_synthetic_feniks_full/checkpoints/best.eqx \
--dataset Data/diffsky/synthetic/feniks_260617_dsps_closure/test.parquet \
--out outputs/runs/amortized_diffsky_synthetic_feniks_full_test_infer
Finalize sharded inference:
python -m euclid_dsps.cli \
--config configs/amortized_diffsky_synthetic_feniks_full_gpu.yaml \
amortized-finalize-inference \
--out outputs/runs/amortized_diffsky_synthetic_feniks_full_test_infer
Outputs
Training writes checkpoints, feature_stats.json, loss histories, latent
diagnostics, and prior samples. Inference writes posterior samples, posterior
summaries, predictive flux residuals, redshift metrics, truth snapshots, and
collapse diagnostics.
Scientific Use
A low photometric residual is not a physical recovery claim. Use the held-out FENIKS truths to inspect posterior calibration, parameter residuals, derived quantities, and MAP/MCLMC comparisons before interpreting recovered galaxy parameters.