6693f3916cb669b74b5e2f261d328eb65263e26c
MZM MoE PINN(PyTorch)
本仓库已从原先的 MLP 基线迁移为 Mixture-of-Experts + Physics-Informed Neural Network 训练流程,目标是尽量对齐 MZM_MoE_PINN_Model.ipynb 的训练行为,同时保留仓库化的命令行入口、结果目录和复现产物。
当前训练管线
- 输入:8 个器件/偏置参数
- 输出:
BW_3dB、IL、V_pi - 模型:MoE,包含多个专家网络与一个 gating 网络
- 数据清洗:保留
V_pi < 500 - 数据划分:
train_test_split(test_size=0.1, random_state=123) - 标准化:
X使用一个StandardScalerY的三个目标分别使用独立的StandardScaler
- 损失:
- 数据项:标准化空间
MSE - 物理项:
dBW/dL <= 0、dIL/dL >= 0、d(V_pi*L)/dL ~= 0、d2BW/dL2平滑项
- 数据项:标准化空间
- 优化器:
AdamW(lr=1e-3, weight_decay=0.05, betas=(0.9, 0.999)) - 训练方式:固定
100epoch,无早停;每轮计算全量 train/test MSE
默认物理约束权重来自 best_hyperparams.json:
{
"lambda_bw_mon": 0.0,
"lambda_IL_mon": 0.3,
"lambda_vpiL": 0.005,
"lambda_smooth": 0.1
}
数据格式
数据文件为 11 列逗号分隔浮点数,列含义如下:
| 顺序 | 列名 | 作为 |
|---|---|---|
| 1 | PN_offset |
输入 |
| 2 | Bias_V |
输入 |
| 3 | Core_width |
输入 |
| 4 | P+_width |
输入 |
| 5 | N+_width |
输入 |
| 6 | P_width |
输入 |
| 7 | N_width |
输入 |
| 8 | Phase_length |
输入 |
| 9 | BW_3dB |
输出 |
| 10 | IL |
输出 |
| 11 | V_pi |
输出 |
支持两种文本格式:
a,b,c,...,k
[a, b, c, ..., k]
安装
cd /path/to/photonAI
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txt
训练
python -m src.main train --config configs/default.yaml
训练完成后会在 results/run_时间戳/ 下生成:
config_snapshot.yamldata_report.mddata_stats.csvcleaning_meta.jsonsplit_indices.jsonx_scaler.pkly_scalers.pkltrain_log.csvcheckpoints/best.ptcheckpoints/last.ptmetrics.csvsummary.jsonsummary.mdtest_predictions.csvfigures/*.png
说明:
train_log.csv记录每轮的全量train_loss/test_losssummary.*与metrics.csv中的loss为标准化空间 MSE- 物理空间指标仍输出
MAE / RMSE / R²
评估
按训练时保存的切分索引与 scaler 重算 train/test 指标:
python -m src.main eval --config configs/default.yaml --run-dir results/run_YYYYMMDD_HHMMSS
推理
输入文件需包含 8 个输入列(csv 带表头,或 8 列 txt):
python -m src.main infer --config configs/default.yaml --input path/to/inputs.csv --output path/to/preds.csv
输出列为原始 8 个输入 + pred_BW_3dB、pred_IL、pred_V_pi。
默认配置
configs/default.yaml 目前对应 notebook 风格的默认 MoE PINN 参数:
data.test_size: 0.1data.random_state: 123data.filter_v_pi_max: 500.0model.hidden_dims: [64, 128, 64]model.n_experts: 60model.gating_hidden: 8model.dropout_rate: 0.0model.use_bn: trueoptimizer.lr: 0.001optimizer.weight_decay: 0.05training.batch_size: 128training.epochs: 100physics.*默认由best_hyperparams.json提供,再由 YAML 显式值覆盖
测试
PYTHONPATH=. PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest -q tests/test_smoke.py
说明
- 现在的主流程优先保证与 notebook 的 数据切分、标准化、模型结构、物理损失和训练循环 一致。
- 为了适配仓库化使用,仍保留了
train / eval / inferCLI 与run_*结果目录结构。 - 旧的 MLP baseline 文档与配置已不再是当前默认路径。 ├── scripts │ ├── train.sh │ ├── eval.sh │ └── infer.sh ├── src │ ├── init.py │ ├── config.py │ ├── utils.py │ ├── data.py │ ├── preprocess.py │ ├── model.py │ ├── losses.py │ ├── metrics.py │ ├── trainer.py │ ├── evaluate.py │ ├── infer.py │ ├── plots.py │ └── main.py └── tests └── test_smoke.py
## 后续可扩展方向
- **Physics-informed loss**:在标准化空间外叠加与器件物理相关的软约束。
- **PINN / 解析近似混合**:将部分输出与简化解析模型对齐。
- **结构搜索**:在 `hidden_dims`、残差块、Bayesian 优化超参等方向扩展。
- **不确定度**:深度集成、MC Dropout、浅层高斯过程等。
## 许可证与引用
若用于论文,请在方法部分说明数据处理、划分方式与随机种子;并引用本仓库或内部项目号(自行补充)。
Description
Languages
Jupyter Notebook
60.6%
Python
39%
Shell
0.4%