ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

wincnn API参考:cookToomFilter、filterVerify等4个公开函数与8个矩阵工具完整清单

wincnn API参考:cookToomFilter、filterVerify等4个公开函数与8个矩阵工具完整清单 wincnn API参考cookToomFilter、filterVerify等4个公开函数与8个矩阵工具完整清单【免费下载链接】wincnnWinograd minimal convolution algorithm generator for convolutional neural networks.项目地址: https://gitcode.com/gh_mirrors/wi/wincnnwincnn是一个 Python 编写的Winograd 最小卷积算法生成器专为卷积神经网络CNN加速而设计。它的核心能力是给定插值点、输出尺寸和滤波器尺寸一键推导 F(n, r) 变换矩阵组 AT、G、BT并可用filterVerify做精确的符号验证。本文带你完整掌握wincnn API 的 4 个公开函数、8 个矩阵工具与 4 个分数位置常量新手 3 分钟即可上手。 一句话认识 wincnn它解决什么问题直接卷积的计算量与滤波器尺寸平方成正比。Winograd 最小算法把卷积转成变换 → 逐元素乘法 → 逆变换乘法次数可被证明达到理论下界。wincnn 用 SymPy 做符号推导生成的矩阵精确无舍入误差特别适合 CNN 里大量出现的小尺寸卷积如 3×3。项目信息说明安装方式pip install wincnn运行要求Python ≥ 3.8SymPy ≥ 1.9源码位置wincnn.py单文件实现离线获取git clone https://gitcode.com/gh_mirrors/wi/wincnn wincnn API 核心4 个公开函数详解1️⃣ cookToomFilter一行代码生成变换矩阵这是 wincnn API 的核心入口源码见wincnn.py第 95–141 行。签名cookToomFilter(a, n, r, fractionsInFractionsInG)参数含义a插值点序列至少需要n r - 2个n输出尺寸r滤波器卷积核尺寸fractionsIn可选控制分数出现在哪块矩阵见下文常量表返回四元组 (AT, G, BT, f)形状一目了然矩阵形状作用ATn × (nr−1)数据前向变换G(nr−1) × r滤波器变换BT(nr−1) × n数据逆变换f对角矩阵分数放置系数最经典的 F(2,3) 用法只需一行wincnn.cookToomFilter((0, 1, -1), 2, 3)它得到的变换矩阵与 README 中 F(2,3)、F(4,3) 示例完全一致可以直接用于推导 2×2 输出、3×3 卷积核的 Winograd 算子。2️⃣ filterVerify符号级验证 FIR 滤波器filterVerify(n, r, AT, G, BT)wincnn.py第 144 行会计算AT · ((G·g) ⊙ (BT·d))返回一列符号表达式。若变换正确结果恒等于d 与 g 的标准线性卷积。由于是符号计算验证结论是严格的而非近似数值比较。3️⃣ convolutionVerify符号级验证线性卷积convolutionVerify(n, r, B, G, A)第 165 行计算B · ((G·g) ⊙ (A·d))。注意线性卷积算法与 FIR 算法用的是同一套变换——把 AT、BT 分别转置得到 A、B 即可这就是论文中说的Transformation Principle变换原理。4️⃣ showCookToomFilter / showCookToomConvolution一键打印两个演示函数第 185、218 行会打印全部矩阵并自动跑一次符号验证是新手最快理解 Winograd 变换结构的方式wincnn.showCookToomFilter((0, 1, -1), 2, 3) wincnn.showCookToomConvolution((0, 1, -1), 2, 3) 8 个矩阵工具函数完整清单变换矩阵并非凭空产生wincnn API 底层由一组矩阵构造工具拼装而成全部集中在wincnn.py前 90 行工具函数行号构造的矩阵作用At(a, m, n)16范德蒙幂矩阵元素为 a[i]ⁿ插值基础A(a, m, n)20数据变换矩阵在 At 上补一行单位行T(a, n)26伴随矩阵多项式乘法的核心Lx(a, n)32插值多项式列拉格朗德基函数L 的内部积木F(a, n)48节点差积拉格朗日插值的分母Fdiag(a, n)60对角矩阵F 的对角化版本FdiagPlus1(a, n)65带角单位行生成四元组中的 f 矩阵L(a, n)72拉格朗日插值矩阵由 Lx 与 F 相除得到Bt(a, n)79逆变换基础矩阵L × TB 的内部积木B(a, n)83数据逆变换矩阵在 Bt 上补一行单位行 其中Lx、Bt属于拼装L、B的内部构件日常使用无需直接调用。️ 4 个分数位置常量决定分数放哪wincnn.py第 89–92 行定义了 4 个常量控制有理分数落在哪块矩阵中——这对把算法落地到定点/整型推理很关键常量值分数所在位置FractionsInG0默认分数集中在 G 矩阵FractionsInA1分数集中在 AT 矩阵FractionsInB2分数集中在 BT 矩阵FractionsInF3分数全部抽到对角矩阵 f 中选FractionsInF时三块主矩阵全部是整数可先做整数乘法、最后再乘 f 中的分数便于硬件或低精度实现。✅ 快速自查用内置测试套件验证环境tests/test_wincnn.py内置 6 个 pytest 用例覆盖 F(2,3)、F(4,3)、F(6,3) 三组变换的期望矩阵以及filterVerify、convolutionVerify的符号验证。克隆仓库后运行pytest全绿即代表 wincnn API 工作正常。❓ 新手常见问题FAQ 精选插值点怎么选优先取小整数如(0, 1, -1, 2, -2)。若需分数插值点如 ±1/2请务必用sympy.Rational保持精确推导README 的 F(6,3) 示例就是这么做的。为什么比 FFT 更快Winograd 最小算法每个输入点只需 1 次实数乘法DFT 约需 1.5–2 次对小尺寸 3×3 卷积优势明显。支持 stride / 空洞卷积吗支持。可先用抽取分解decimation转成无步长卷积再套用 Winograd详见FAQ.md。变换变大不稳定Cook-Toom 算法数值稳定性随尺寸下降但 CNN 常用的小卷积中收益远大于代价这也是 FAQ 中被反复讨论的取舍点。 项目文件导航文件内容wincnn.py全部源码4 个公开函数 8 个矩阵工具 4 个常量tests/test_wincnn.pypytest 测试套件含期望变换矩阵README.mdF(2,3)、F(4,3)、F(6,3) 三个可运行示例FAQ.md算法原理、运算量分析、扩展卷积问答2464-supp.pdfCVPR 2016 原论文补充材料Winograd 综述CHANGELOG.md版本历史当前 2.0.1CITATION.cff学术引用信息按生成 → 验证 → 落地三步走cookToomFilter 出矩阵filterVerify / convolutionVerify 验正确性fractionsIn 定落地形态——这就是 wincnn API 的全部精华。【免费下载链接】wincnnWinograd minimal convolution algorithm generator for convolutional neural networks.项目地址: https://gitcode.com/gh_mirrors/wi/wincnn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表