卷积神经网络中卷积的OpenCL实现
==============================================================
目录
==============================================================
本文主要介绍深度学习中卷积,以及卷积核的OpenCL实现。
另外:新版对齐方式都没了,莫名其妙。
1、卷积
在CNN(Convolutional Neural Network, 卷积神经网络)中,卷积是个必不可少的部件,该网络也因卷积得名。CNN的卷积层中,有许多滤波器,这些滤波器也称为卷积核,用于卷积运算,提取数据特征,这些滤波器的系数由训练得到。
在数字信号处理中,信号x(n)经过系统,相当于信号与系统的冲激响应函数h(n)进行卷积,得到输出y(n),其定义如下式。
上式中的符号“*”是卷积的意思。
可以看出,信号x(n)经过系统,与冲击响应函数序列经过纵轴翻折过的序列对应相乘。
而在卷积神经网络中卷积操作的原理即卷积核与对应的点对应相乘,核心即是乘累加,
卷积的方式比较多,假定滤波器的滑动步长stride(用s表示),以及滤波器的填充方式(填充长度用p表示),原始特征图W*H(宽W,高H),滤波器的尺寸用K*K表示,则输出特征图的尺寸为
上式中括号为下取整。
这个关系暂时没想通也没关系,可以搜索卷积神经网络卷积了解一下,卷积的核心即乘累加,如下为卷积图解。
图1. 卷积示例
上图中左侧为特征图与卷积核卷积,右侧为输出,其中卷积的步长stride为1,滤波器滑动方向先进行行处理,再进行列处理。
如右侧的最左上角的数 3= 2*1 + 3*(-1) + 4 + 6*0;
随后滤波器向右滑动1个单位,此时滤波器对应的数据为[3,7,6,3],所以3*1 + 7*(-1) + 6*1 +3*0 = 2,其他同理。
行处理完成,滤波器向下移动一个单位,接着处理下一行,此时与之对应的数为[4,6,12,0],所以4*1 + 6*(-1) + 12*1 + 0*0 = 10。其他同理。
图2. 特征图填充,卷积