
Efficient-KAN 安装教程快速跑通 KAN 训练【免费下载链接】efficient-kanAn efficient pure-PyTorch implementation of Kolmogorov-Arnold Network (KAN).项目地址: https://gitcode.com/GitHub_Trending/ef/efficient-kanKAN 原始实现跑起来最先遇到的问题是 OOM一层的激活需要把输入展开成 (batch, out_features, in_features) 的三维张量显存开销随输出宽度线性上涨。Efficient-KAN 是对这步计算做了改写的纯 PyTorch KAN 实现装好它只需要 3 条命令拿代码、装依赖、跑官方示例。它没有改 KAN 的网络结构只改激活函数的计算方式。由于每条边的激活函数都是固定一组 B 样条基函数的线性组合可以先用所有基函数作用到输入上再线性组合结果整个前向变成两次矩阵乘法。装好后用法和普通 nn.Module 完全一样。⚡ 最短路径3 条命令跑通 MNIST 示例前置条件只有 Python 3.8依赖全部声明在 pyproject.toml 里不用手动配置。git clone https://gitcode.com/GitHub_Trending/ef/efficient-kan cd efficient-kan pip install -e . python examples/mnist.py第一条拿代码第二条以可编辑模式安装包和全部依赖torch2.3.0、torchvision0.18.0、tqdm 等会自动拉取第三条直接跑 examples/mnist.py 里的手写数字示例。首次运行会自动把 MNIST 下载到 ./data 目录训练 10 个 epoch每轮打印验证集 loss 和准确率。怎么确认装好了先跑一次很小的前向确认包本身可用python -c from efficient_kan import KAN; import torch; print(KAN([4, 8, 2])(torch.randn(3, 4)).shape)预期输出torch.Size([3, 2])即 3 个样本、2 维输出与层列表的最后一维一致。如果出现 ModuleNotFoundError先检查当前 shell 环境和执行 pip install 的是否同一个用pip show efficient-kan确认包装在了当前环境里。再看训练曲线MNIST 示例每轮打印一行形如Epoch 1, Val Loss: ..., Val Accuracy: ... ... Epoch 10, Val Loss: ..., Val Accuracy: ...README 说明当前初始化方式下MNIST 验证准确率在 10 轮训练后可到 97% 左右。如果你的数值明显偏低先看前 1~2 个 epoch 的 loss 是否在下降。为什么值得用激活计算改成了矩阵乘法关键在 src/efficient_kan/kan.py 的forward方法先算出一组 B 样条基值 (batch, in_features, 8)默认 grid_size5、spline_order3共 538 个基函数再做两次F.linear得到结果。对比原实现的 (batch, out_features, in_features) 中间张量以 784 进 64 出为例原实现每样本中间量是 784×64 个数这个实现是 784×8且与输出宽度无关。反向传播走矩阵乘法的自动求导不需要手写梯度。对应的取舍是论文里的 L1 稀疏化它作用在展开后的中间张量上、需要对每个样本做非线性运算与改法冲突所以作者换成了对样条权重的 L1 惩罚即regularization_loss()方法。如果你的工作依赖原始稀疏化语义需要先读源码里的注释。⚠️ 容易踩的坑ModuleNotFoundError: No module named efficient_kan—— 原因当前 shell 环境不是装包的那个环境。解法在当前环境执行pip show efficient-kan并在同一环境里重跑pip install -e .。安装很慢、下载体积大 —— 原因pip 默认拉带 CUDA 的 torch 轮子纯 CPU 机器用不上。解法先装同版本 CPU 版 torch再执行pip install -e .。准确率上不去MNIST 只有 20% 左右—— 原因旧版本 base_weight 用常数初始化训练学不动。解法当前仓库已改为 kaiming_uniform_ 初始化与 nn.Linear 一致运行前确认拉到了最新代码。显存仍然紧张 —— 原因样条参数量随 grid_size、spline_order 增长且默认每层多一组 spline_scalerenable_standalone_scale_splineTrue。解法自己构造 KANLinear 时可传enable_standalone_scale_splineFalse但 README 提示可能掉精度。下一步往哪里读examples/mnist.pyMNIST 完整训练流程含 AdamWlr1e-3、weight_decay1e-4、ExponentialLRgamma0.8、batch_size64、10 个 epoch。换成自己的任务时先改KAN([28 * 28, 64, 10])这一行。src/efficient_kan/kan.py全部核心代码约 280 行。KANLinear.forward是改写后的计算update_grid演示网格如何按输入分布重新适配regularization_loss是权重 L1 项。tests/test_simple_math.py用 2 输入的 KAN 配合 LBFGS 学习 (uv)/(1uv) 的小实验把目标函数换成更复杂的可以体会激活函数可学习的含义。README.md英文原版 README设计取舍为什么把样本 L1 换成权重 L1、初始化的影响只有那里写全了。环境配好后先把 MNIST 示例跑到 97% 左右的验证准确率确认无误再打开 kan.py 从调 grid_size 开始体会显存和精度之间的平衡。【免费下载链接】efficient-kanAn efficient pure-PyTorch implementation of Kolmogorov-Arnold Network (KAN).项目地址: https://gitcode.com/GitHub_Trending/ef/efficient-kan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考