首先用图来说明基本概念:
矩阵乘法的概念理解
在神经网络全连接的使用情况为:
此时,输出为K个神经元,每个神经元有一个输出,后接的全连接层,对每个神经元都有一个系数,又有n个这样的神经元,所以权值矩阵为k*n,输出为1*n维,则保证每个输出神经元都有一个输出。
在神经网络卷积的使用情况为:
输入有Depth维度,则卷积核也应该是depth维度。
图示为卷积的原理,每个卷积核逐个扫过输入数据,累加得到相应的输出。知道卷积计算的原理,但是怎么样在程序中进行高效的执行呢?使用了GEMM函数,通用矩阵乘法函数,把输入数据进行了转化,这里是输入×权值,把输入转化成了行,权值转化成了列,也可以反过来。
把输入数据对应需要做卷积的每一个块,都拉成矩阵的一行,把卷积核都拉成一列,利用矩阵乘法完成卷积计算。然后再按照输出图像的要求,把得到的结果矩阵还原成要求的图像大小。
单通道输入进行如下处理:
此时卷积核也是单通道,直接拉成一个行向量即可。
如果是多通道,首先卷积核按照通道拉成一个一维行向量,三个通道排成一行,对于输入也是按照通道,排成一个大矩阵,如下:
根据矩阵乘法得到的矩阵还原成输出。