DESI Spectral Anomaly Detector
PyTorch autoencoder for detecting spectrally unusual objects in DESI survey data.
Model Details
- Architecture: Encoder (496โ256โ128โ64) + Decoder (64โ128โ256โ496)
- Training data: 21,388 DESI EDR spectra from 10 diverse healpix pixels
- Input: Concatenated B+R+Z arm flux vectors (16x downsampled from 7,958 to 496 features)
- Output: Reconstruction + anomaly score (MSE per spectrum)
- Latent dimension: 64
Training
- 100 epochs, Adam optimizer, lr=1e-3 with ReduceLROnPlateau
- Per-spectrum normalization (divide by median absolute flux, clip to [-10, 10])
- Sky-region holdout validation
Results
- 30/30 top spectral anomalies NOT in SIMBAD (genuinely uncataloged)
- Objects from 4+ distinct sky regions (not clustered)
- Gate 3 injection: emission line PASSES (2.3x), z-shift borderline (1.3x)
Usage
import torch
class SpectralAE(torch.nn.Module):
def __init__(self, n_in=496, n_lat=64):
super().__init__()
self.enc = torch.nn.Sequential(
torch.nn.Linear(n_in, 256), torch.nn.BatchNorm1d(256), torch.nn.ReLU(), torch.nn.Dropout(0.1),
torch.nn.Linear(256, 128), torch.nn.ReLU(),
torch.nn.Linear(128, n_lat))
self.dec = torch.nn.Sequential(
torch.nn.Linear(n_lat, 128), torch.nn.ReLU(),
torch.nn.Linear(128, 256), torch.nn.BatchNorm1d(256), torch.nn.ReLU(), torch.nn.Dropout(0.1),
torch.nn.Linear(256, n_in))
def forward(self, x): return self.dec(self.enc(x))
model = SpectralAE()
model.load_state_dict(torch.load("autoencoder_model.pt"))
model.eval()
Part of the BigBounce Research Program
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐ Ask for provider support