feat: 实验记录器 + 冒烟测试改造
新增 src/exp/exprecord.py:用 record() 上下文管理器包住实验, 自动留档 stdout、图、参数、耗时、包版本和 git commit, 并维护 results/INDEX.md 总表。
三个省心点:
- 退出时兜底保存所有还开着的 matplotlib 图
- 实验抛异常也留档(status=failed)
- meta.json 带 git commit 与 dirty 标记,日后可对上代码版本
冒烟测试改造:接入记录器,新增两张汇报用图
- 收敛曲线(log-log,含 O(h^2) 参考斜率线)—— 参考线与数据点完全重合
- 条件数曲线(log-log,含斜率 1 参考线)—— 验证 kappa ~ h^-2
results/ 保持不入库(本机留档)。
Co-Authored-By: Claude Code noreply@anthropic.com
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
选题一 · 神经算子快速 PDE 代理模型
课程选题一的代码仓库。研究对象是二维 Poisson 方程上的神经算子(FNO / DeepONet)代理模型, 以有限元(FEM)解作为高保真基准,做精度 / 速度 / 可靠性的对比。
核心研究问题:神经算子在分布内(ID)精度高,并不代表它在分布外(OOD)可靠。 本课题系统测量它的失效边界,并与 FEM 的病态性退化做对照。
环境
Python 3.11.9 + venv,原生 Windows(不需要 WSL / FEniCSx)。
PyTorch 需要单独装 CUDA 版,原因和命令见 requirements.txt —— 直接
pip install torch会装成 CPU 版。本机实测环境(2026-09-15)
目录结构
实验记录
每次实验自动留档,不需要手动整理。用
record上下文管理器包住实验主体:产出落进
results/<时间戳>_<实验名>/:log.txtmeta.jsonsummary.mdfig_*.png同时自动维护
results/INDEX.md总表,一行一次实验。三个省心的地方:
status=failed),失败的记录同样有价值meta.json里带 git commit 和是否脏,日后能对上代码版本冒烟测试结论(2026-09-15)
脚本:
scripts/smoke_test_poisson.py· 总耗时 5.7 秒目的:验证 scikit-fem 链路正确、拿到 FEM 侧的成本实数。 算例为课件基础算例
f₁ = 2π²sin(πx)sin(πy),解析解u = sin(πx)sin(πy)。① 正确性 —— 链路可信
f₁f₂(含sin(2πx))② FEM-1~4 —— 二阶收敛,误差比精确 4.00
误差比恒为 4,与 P1 线性元的 O(h²) 理论完全吻合 —— FEM 基准是可预测的强基线。
③ 数据生成吞吐 —— 5000 样本约 10 分钟
128×128 单次求解(含建网格与装配)124 ms:
结论:数据生成不必过夜,可以放进迭代循环。
④ 病态性 —— κ 每加密一倍涨 4 倍
验证了 κ ~ h⁻²。附带旁证:λ_max 稳定收敛到 8.0,即 P1 单元在均匀三角剖分上离散拉普拉斯最大特征值的理论值。
📌 这组结果说明了一件要紧的事
在课程这个尺度上,FEM 并不慢 —— 128² 单次 94 ms,5000 个工况 10 分钟。 所以选题一的卖点**不能是”神经算子更划算”**:精度上 FEM 稳赢(二阶收敛),速度上在课程尺度 FEM 也不输。
唯一站得住的切口是”可靠性边界” —— 即 ID 精度高 ≠ OOD 可靠。这正是本课题的定位。
进度
参考文献定位
../neural_operators-survey26_v2/(tagsurvey26_v2)。 其compare_nops实测:Poisson 上 ID 误差 ~5.7e-03,OOD 退化到 ~1.36e+00(约 230 倍)。