张量相乘核心结论:需先明确乘法类型(元素积/矩阵积/点积),不同类型对应不同维度要求,结果维度由乘法规则决定,核心分三类常见运算。
一、元素积(Hadamard积):对应元素直接相乘
- 核心要求:张量维度必须完全一致(无需广播,广播仅适用于加减,不适用于元素积)。
- 运算逻辑:两个张量相同位置的元素逐一相乘,结果维度与原始张量一致。
- 示例:
- 张量A(2×3):[[1,2,3],[4,5,6]]
- 张量B(2×3):[[2,2,2],[3,3,3]]
- 结果(2×3):[[1×2,2×2,3×2],[4×3,5×3,6×3]] = [[2,4,6],[12,15,18]]
二、矩阵积(Matmul):遵循“前张量列数=后张量行数”规则
- 核心要求:第一个张量的最后一个维度(列数),必须等于第二个张量的倒数第二个维度(行数)。
- 运算逻辑:按矩阵乘法规则,行乘列求和,结果维度为“前张量除最后一维外的所有维度 + 后张量除倒数第二维外的所有维度”。
- 示例:
- 2维张量(矩阵)相乘:A(2×3) × B(3×4) → 结果(2×4)
- A:[[1,2,3],[4,5,6]],B:[[1,0,0,0],[0,1,0,0],[0,0,1,0]]
- 结果:[[1×1+2×0+3×0, ...], [4×1+5×0+6×0, ...]] = [[1,2,3,0],[4,5,6,0]]
- 3维张量相乘:A(2×3×4) × B(2×4×5) → 结果(2×3×5)(第一维“2”保持一致,3×4 与 4×5 运算得 3×5)
- 2维张量(矩阵)相乘:A(2×3) × B(3×4) → 结果(2×4)
三、点积(Dot):所有元素对应相乘后求和
- 核心要求:两个张量需为“一维张量(向量)”,或可通过展平为一维张量(高维张量点积等价于展平后一维向量点积)。
- 运算逻辑:对应元素相乘后求和,结果为一个标量(0维张量)。
- 示例:
- 向量A(1×3):[1,2,3],向量B(1×3):[4,5,6]
- 结果:1×4 + 2×5 + 3×6 = 4 + 10 + 18 = 32
要不要我帮你生成不同类型张量相乘的代码实现示例(含PyTorch/TensorFlow的元素积、matmul、dot函数用法)?