Intro
对张量进行reshape操作, 数据是怎样重新组织的.
对张量进行matmul操作, 对于高维张量是怎么计算的.
reshape
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| a = np.arange(16) b = a.reshape(2, 4, 2) c = a.reshape(2, 2, 4) print('a', a) print('b', b) print('c', c)
""" a [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] b [[[ 0 1] [ 2 3] [ 4 5] [ 6 7]]
[[ 8 9] [10 11] [12 13] [14 15]]] c [[[ 0 1 2 3] [ 4 5 6 7]]
[[ 8 9 10 11] [12 13 14 15]]] """
|
对于所有的元素squeeze到一阶的位置始终是一样的, reshape只是将他们放到张量的不同阶的位置上.
matmul
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| a = np.arange(16) a = a.reshape(2, 4, 2) b = a.reshape(2, 2, 4) c = np.matmul(a, b) print('a', a) print('b', b) print('c', c)
""" a [[[ 0 1] [ 2 3] [ 4 5] [ 6 7]]
[[ 8 9] [10 11] [12 13] [14 15]]]
b [[[ 0 1 2 3] [ 4 5 6 7]]
[[ 8 9 10 11] [12 13 14 15]]]
c [[[ 4 5 6 7] [ 12 17 22 27] [ 20 29 38 47] [ 28 41 54 67]]
[[172 189 206 223] [212 233 254 275] [252 277 302 327] [292 321 350 379]]] """
|
对于高阶的矩阵乘, 需要他们的总维数是一样的.
对于再高的阶数, 用于计算的只有第-1, -2维.
参与计算后高阶的部分仍保持不变.