目录

选题一 · 神经算子快速 PDE 代理模型

课程选题一的代码仓库。研究对象是二维 Poisson 方程上的神经算子(FNO / DeepONet)代理模型, 以有限元(FEM)解作为高保真基准,做精度 / 速度 / 可靠性的对比。

核心研究问题:神经算子在分布内(ID)精度高,并不代表它在分布外(OOD)可靠。 本课题系统测量它的失效边界,并与 FEM 的病态性退化做对照。

定位:这不是”神经算子比 FEM 快 N 倍”的复现,而是”在什么条件下不能用神经算子“的判据。


环境

Python 3.11.9 + venv,原生 Windows(不需要 WSL / FEniCSx)。

python -m venv .venv
.\.venv\Scripts\Activate.ps1          # PowerShell

pip install -r requirements.txt

PyTorch 需要单独装 CUDA 版,原因和命令见 requirements.txt —— 直接 pip install torch 会装成 CPU 版。

本机实测环境(2026-09-15)

scikit-fem 12.0.2
numpy 2.4.6
torch 2.14.0+cu126(CUDA 可用)
GPU NVIDIA GeForce RTX 4060 Laptop,8.6 GB

⚠️ 本机 arxiv.org / github.com / download.pytorch.org / dropbox.com 均不可达。 下代码走 codeload.github.com,装 CUDA torch 走 mirror.sjtu.edu.cn/pytorch-wheels/


目录结构

├─ src/
│  ├─ fem/        FEM 求解器、网格、源项采样        (数据生成)
│  ├─ no/         神经算子 FNO / DeepONet           (代理模型)
│  └─ exp/        实验记录器(exprecord.py)
├─ scripts/       可执行入口
├─ data/          生成的数据集                     (不入库)
├─ results/       实验留档:日志、图、meta         (不入库)
└─ docs/          实验记录、笔记

实验记录

每次实验自动留档,不需要手动整理。用 record 上下文管理器包住实验主体:

import os, sys
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(ROOT, "src", "exp"))
from exprecord import record

with record("实验名", params={"lr": 1e-3}) as rec:
    print("print 照常显示,同时写入 log.txt")
    rec.metric("rel_l2", 5.105e-05)          # 进 summary.md 和 INDEX.md
    rec.figure(fig, "convergence")           # 存图并关闭

产出落进 results/<时间戳>_<实验名>/

文件 内容
log.txt 终端输出全文
meta.json 时间、耗时、参数、指标、包版本、git commit
summary.md 指标表 + 内嵌图 + 终端输出,可直接贴进报告
fig_*.png 图(150 dpi)

同时自动维护 results/INDEX.md 总表,一行一次实验。

三个省心的地方

  1. 退出时兜底保存所有还开着的图,忘了命名也不会丢
  2. 实验抛异常也会留档status=failed),失败的记录同样有价值
  3. meta.json 里带 git commit 和是否脏,日后能对上代码版本

⚠️ results/ 不入库(本机留档)。如需把某次结果冻结进版本管理,挑出图另存到 docs/


冒烟测试结论(2026-09-15)

脚本:scripts/smoke_test_poisson.py · 总耗时 5.7 秒

目的:验证 scikit-fem 链路正确、拿到 FEM 侧的成本实数。 算例为课件基础算例 f₁ = 2π²sin(πx)sin(πy),解析解 u = sin(πx)sin(πy)

① 正确性 —— 链路可信

算例 相对 L2 误差(64²)
基础 f₁ 2.042e-04
多模态 f₂(含 sin(2πx) 2.169e-04

② FEM-1~4 —— 二阶收敛,误差比精确 4.00

网格 节点数 单元数 相对 L2 误差 单次耗时 误差比
16×16 289 512 3.256e-03 1.8 ms
32×32 1,089 2,048 8.162e-04 4.5 ms 3.99
64×64 4,225 8,192 2.042e-04 26.2 ms 4.00
128×128 16,641 32,768 5.105e-05 94.3 ms 4.00

误差比恒为 4,与 P1 线性元的 O(h²) 理论完全吻合 —— FEM 基准是可预测的强基线

③ 数据生成吞吐 —— 5000 样本约 10 分钟

128×128 单次求解(含建网格与装配)124 ms

样本数 预计耗时
100 12.4 s
500 62 s
1,000 2.1 min
5,000 10.3 min

结论:数据生成不必过夜,可以放进迭代循环。

④ 病态性 —— κ 每加密一倍涨 4 倍

网格 节点数 λ_max κ 放大倍数
16×16 289 7.923 1.031e+02
32×32 1,089 7.981 4.143e+02 ×4.02
64×64 4,225 7.995 1.659e+03 ×4.00
128×128 16,641 7.999 6.640e+03 ×4.00

验证了 κ ~ h⁻²。附带旁证:λ_max 稳定收敛到 8.0,即 P1 单元在均匀三角剖分上离散拉普拉斯最大特征值的理论值。

📌 这组结果说明了一件要紧的事

在课程这个尺度上,FEM 并不慢 —— 128² 单次 94 ms,5000 个工况 10 分钟。 所以选题一的卖点**不能是”神经算子更划算”**:精度上 FEM 稳赢(二阶收敛),速度上在课程尺度 FEM 也不输。

唯一站得住的切口是”可靠性边界” —— 即 ID 精度高 ≠ OOD 可靠。这正是本课题的定位。


进度

  • 环境搭建(原生 Windows,scikit-fem + CUDA torch)
  • FEM 链路验证(二阶收敛、κ ~ h⁻² 实测)
  • FEM 成本基线上手(5000 样本 ≈ 10 分钟)
  • FEM 交付件:求解器参数化 + 数据集生成 + 可视化
  • 神经算子训练(FNO / DeepONet),ID 误差达标(目标 ~1e-2)
  • OOD 切分实验:频率外推 / 分辨率迁移 / 几何迁移
  • 与 FEM 的失效模式对照分析

参考文献定位

  • Jha 2025From Theory to Application: A Practical Introduction to Neural Operators (arXiv:2503.05598;Mathematics 14(13):2421)—— 实验设计与本课题几乎完全重合, 配套代码见本机 ../neural_operators-survey26_v2/(tag survey26_v2)。 其 compare_nops 实测:Poisson 上 ID 误差 ~5.7e-03,OOD 退化到 ~1.36e+00(约 230 倍)
  • Hildebrand & Klinge 2024 —— 神经算子精度天花板 10⁻²~10⁻³,远不及 FEM 的 10⁻⁶。
  • Shikhman 2026 —— 750 个模型证实:”强的分布内精度不能可靠地预测鲁棒性”。
关于
51.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号