本文主要是介绍69、python - 利用向量内积来优化卷积运算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
上一节介绍了利用 python 实现的原始卷积版本性能很差的原因,不知道各位同学有尝试的么?
这一节介绍下如何对卷积的乘累加进行一次优化:我们利用 np.dot 来进行优化。
np.dot
np.dot 是 numpy 库提供的一个函数,用来计算两个向量的点积,或者叫内积。那什么是内积呢?
假设有两个向量:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
dot_product = np.dot(a, b)
np.dot 计算的就是"1*4 + 2*5 + 3*6", 这不就是卷积运算 channel 维度的乘累加操作吗?
因此,我们仅仅需要将最原始卷积中的乘累加操作,利用 np.dot 来替代,便可以完成一次最基础,但是效果很好的优化。
而且几乎可以提升数百倍的性能,当然你也可以把 np.dot 拿来优化全连接的运算,因为全连接运算本质上也是一种乘累加运算。
为什么 np.dot 可以提升性能?
首先,numpy 作为一个广泛使用的科学计算库,它是提供了大量的数学运算函数的,可以进行很多矩阵运算,并且高性能也是它的一个特性之一。
np.dot 函数之所以具有高性能,得益于以下几点:
-
底层实现:numpy 的核心算法是用 C 语言编写的,我们知道 C 语言是一种更加接近底层的语言,执行速度非常快。
调用 np.dot
这篇关于69、python - 利用向量内积来优化卷积运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!