A unified codebase for Physics-Informed Neural Networks (PINNs) enhanced with selective neuron pruning and fine-tuning, supporting both data-assimilation (forward) and inverse PDE problems, plus a library of pruning strategies.
pinn-prune-finetune/
├── configs/ # YAML config files for all problems
│ ├── Heat.yaml
│ ├── Poisson.yaml
│ ├── Stokes.yaml
│ ├── Wave.yaml
│ ├── EBInv.yaml
│ ├── HInv.yaml
│ ├── NSInv.yaml
│ ├── PINv.yaml
│ └── WInv.yaml
├── common/ # shared utilities and PINN definition
│ ├── __init__.py
│ ├── pinn_model.py # generic PINN MLP + learnable PDE params
│ ├── partition_data.py # data partitioning
│ ├── pruning.py # iterative selective-prune routines
│ └── evaluate.py # unified evaluation metrics
├── assimilation/ # forward (data-assimilation) problems
│ ├── heat/
│ ├── poisson/
│ ├── stokes/
│ └── wave/
├── inverse/ # inverse PDE problems
│ ├── EBInv/ # Euler-beamer
│ ├── HInv/ # Heat_inv
│ ├── NSInv/ # Navier_Stokes_inv
│ ├── PInv/ # poisson_inv
│ └── WInv/ # wave_inv
├── scripts/ # alternative, single-step & criterion-based pruning
│ ├── single_step.py
│ └── pruning_criteria.py
├── experiments/ # example Jupyter notebooks
│ ├── PInv.ipynb
│ └── Poisson.ipynb
├── README.md # this file
└── requirements.txt # Python dependencies
pip install -r requirements.txt# Heat equation
cd assimilation/heat
python -m assimilation.heat.train --config configs/Heat.yaml
python -m assimilation.heat.finetune --config configs/Heat.yaml# Poisson inverse
cd inverse/poisson_inv
python -m inverse.PInv.train --config configs/PINv.yaml
python -m inverse.PInv.finetune --config configs/PINv.yamlIn your configs/*.yaml, set under pruning:
pruning:
strategy: rms # one of: iterative, single_step, rms, freq, std
layers: [0,2,4,6]
alpha: 0.05
num_iter: 10 # only for multi-iter methodsThe finetune.py scripts will dispatch to:
common/pruning.py→iterative+biasscripts/single_step.py→single_step+biasscripts/pruning_criteria.py→iterative+abs,rms,freq,std
cd experiments
jupyter lab PInv.ipynb
jupyter lab Poisson.ipynb- iterative (default) Multi-step heuristic in
common/pruning.py. - single_step One-shot prune based on biased score, the same as iterative.
- abs mean absolute-based score.
- rms Root-mean_square-based score.
- freq Frequency-based score.
- std Standard deviation-based score.
- Add a new PDE:
- Create a
configs/*.yaml - Add code under
assimilation/orinverse/ - (Optional) add analysis notebook under
experiments/
- Create a
- Pruning research: Drop new pruning routines into
scripts/and add astrategyname in your configs.
We sincerely welcome all improvements, issues and pull-requests!