卷积是深度学习中最重要的运算,对于初学者,或者自学者来说,看书看得真是很迷糊。我也是经历了这个阶段,所以在这里分享一下我对卷积的理解,并且附上自己手撸的C++代码。
深度学习的卷积和信号与系统的卷积是截然不同的!
所以学通信的小伙伴千万不要被名词误导了。
01单通道卷积
单通道卷积如上所示,对于一个卷积操作,输入就是待卷积的图像image,卷积核就是filter,得到的最终结果就是featuremap,这些英文的专属名词还是要知道的。
卷积过程就是卷积核在输入图像上滑动计算得到输出,滑动时对应点相乘,然后得到的结果相加,就是输出对应点的值,公式如下所示。
卷积公式02多通道卷积
多通道的卷积是很多人不能理解的地方。
32x32x32的输入图像和3x3x64得kernel卷积,得到的输出为啥会是32x32x64(padding=‘SAME’的情况),怎么计算的呢?
说白了一点不复杂,对于64个3x3的kernel,我编号为k0,k2……k63。
输入图像为32个32x32的图像,我编号为a0,a1……a31。
那么计算的时候就是这样的:
k0和a0卷积,这个过程上面讲过,得到输出b0;以此类推,k0和a0~a31相乘得到b0~b31,那么将b0~b31对应的位置加起来,得到一个32x32的卷积图,我们称为c0;以此类推,将k1~k63分别于a0~a31计算一次,得到c1~c63,加上前面的c0,可不就是一个32x32x64得featuremap。Featuremap意为特征图,这个是专有名词,需要知道哦。
多通道卷积如果文字你明白了的话,上面这幅图,嫌那么多就不要纠结了,能看懂最好了。
03卷积计算C++实现
C++实现卷积这里需要用到Eigen的库,tensorflow也是这么做的。
我将与您分享AI算法面试所需的准备知识。实际上,这不仅限于深度学习和计算机视觉,还包括模型算法原理,模型训练,模型转换优化,模型部署和深度学习框架。此外,还有C++,数据结构和编译底层等。
欢迎大家的