我当前的项目与胶囊网络有关,它需要许多小的矩阵矢量乘法。
如果没有优化,我认为一个大型matvec和许多小型matvec应该具有相同的操作次数。
将600维向量转换为相同维向量时。
temp_id
中的矩阵和SELECT 1 as big_id, 1 as temp_id, '101' as names
UNION ALL SELECT 1,1, 'z3Awwer',
UNION ALL SELECT 1,1, 'gA1sd03',
UNION ALL SELECT 1,3, 'gA1sd03',
UNION ALL SELECT 1,3, 'sAs10sdf4',
UNION ALL SELECT 1,5, 'Adf105',
UNION ALL SELECT 2,1, 'A1sdf02',
UNION ALL SELECT 2,1, '345A103',
UNION ALL SELECT 2,2, '345A103',
UNION ALL SELECT 2,2, 'A1sd04',
UNION ALL SELECT 2,4, '6_0Awe105'
中的向量之间的matvec
需要R^600x600
。
从R^600
的{{1}}和720000 operations (360000 summations + 360000 multiplications)
的{{1}}之间的30x30 20-dimensional
计算matvec
向量时,它也需要{{1 }}。
计算速度彼此完全不同。 (大matvec约为900 matrices
)
这是因为乘法运算过多吗?
还是R^20x20
或30 vectors
没有针对许多小矩阵乘法进行优化?
(我猜这是因为大矩阵乘法更适合并行化。)
在回答之后,我决定使用tf.einsum。 Optimizing Tensorflow for many small matrix-vector multiplications
R^20