准备数组与环境
需要 Python 3 和 NumPy。若尚未安装,可执行 python -m pip install numpy。数组具有统一形状与数值类型:
import numpy as np
A = np.array([[1, 2], [3, 4]], dtype=float)
B = np.array([[2, 0], [1, 3]], dtype=float)
C = A @ B
assert C.shape == (2, 2)
assert np.allclose(C, [[4, 6], [10, 12]])
对于二维数组,@ 是矩阵乘法,* 是逐元素乘法。A * B 得到 [[2, 0], [3, 12]],并非行列内积。
一行一个样本
若 ,权重 ,则 。
import numpy as np
X = np.array([[1., 2.], [3., 4.], [5., 6.]])
W = np.array([[1., 0., -1.], [0., 2., 1.]])
Y = X @ W
assert Y.shape == (3, 3)
assert np.allclose(Y[0], [1, 4, 1])
形状检查比“没报错”更有意义。方阵时,错误转置也可能运行成功,却产生错误语义。
广播与偏置
import numpy as np
X = np.array([[1., 2.], [3., 4.]])
W = np.eye(2)
b = np.array([10., 20.])
Y = X @ W + b
assert np.allclose(Y, [[11, 22], [13, 24]])
长度为 2 的偏置沿最后一个维度对齐,每行增加同一向量。广播从末尾对齐:维度相等或其中一个为 1,才允许匹配。
数值比较
浮点比较常用 np.allclose,但应根据任务选定绝对和相对容差。它不自动证明误差可接受,尤其在数值很小的场景。随机实验可用 np.random.default_rng(42) 固定种子,方便复现。
练习与关联
为 、 为 时,偏置长度为 4,输出为 。使用随机数组验证,再改变 第一维观察错误。
这已经是线性层的核心计算。库函数不会改变数学规则,只会更高效地执行它。
这一节,你理解到哪里了?
这是你的自我反馈,与练习估计、课程进度分别记录。
本文为TheZ原创教学内容。正文采用 CC BY-NC-SA 4.0,代码采用 MIT 许可。请尊重署名与授权范围。