张量契约
能逐轴解释 batch、feature 与 class,而不是靠广播碰巧运行。
为什么需要它
后面的每一个模型都建立在 shape、dtype、device 与 broadcasting 的可预测性上。
开始前应该已经会回答
- 能解释 [M,1,D] 与 [1,N,D] 如何广播
- 能区分 view/reshape 与数据复制
输入、输出与契约
- 输入
- X_train [N,D], X_test [M,D]
- 输出
- distance [M,N]
- 每个单元只对应一对样本
- 结果非负,完全相同输入距离为 0
- 把 batch 轴当 feature 轴
- 依赖隐式广播但说不出扩张方向
用最小例子检查
取 M=2,N=3,D=2,用纸手算六个平方距离,再与代码逐项比较。
如果你看到……
优先检查:广播轴或 reduction dimension
优先检查:平方和公式、数值误差与是否漏掉 square
预测 → 实验 → 证据
- 先预测
- 把 one-loop 改成 no-loop 后,数值应该一致;运行时间会下降,但临时 tensor 可能增大。
- 做实验
- 固定同一小输入,比较 two-loop / one-loop / no-loop 的最大绝对误差与 wall time。
- 留证据
- 三种实现误差
- 输入 shape/dtype/device
- 是否同步计时、重复次数
渐进提示
先独立排查 10–15 分钟,再按需展开。
提示 1
先写出目标 distance matrix 的每个轴
提示 2
检查 sum 的 dimension,而不是先改公式
提示 3
把输入缩到 2×3×2 并打印广播后的 shape
闭卷检查 · 张量契约
- 三种实现逐项一致
- 能闭卷解释广播
- 测量记录包含配置