前言
提示:学习深度学习过程中发现网上讲卷积大部分是按矩阵乘法讲的,正经讲运算过程的好少,国内的几个还没看懂。。。。就目前查到的资料总结一下。
下面定义全局变量X=[[1,2][3,4]] 为本文的卷积核,Y=[[5,6][7,8]]为input
X=[[1,2][3,4]]
Y=[[5,6][7,8]]
一、正经的卷积
参考1
参考 2
正经卷积实质在于将卷积模板图像翻转(旋转180),然后将卷积模板依次从上到下、从左到右滑动,计算在模板与原始图像交集元素的乘积和,该和就作为卷积以后的数值。也就是5步走:
1、首先进行周期延拓,补零得到X1,Y1
2、X1的每一行生成一个小Toeplitz矩阵
3、算出整个的Toeplitz矩阵
4、将Y变为列向量
5、将Toeplitz矩阵和列向量相乘得出结果
参考1中构造小Toeplitz矩阵的方法我没弄明白,看了参考2明白了一些:
Toeplitz矩阵指矩阵中每条自左上至右下的斜线上的元素相同,做小Toeplitz矩阵时第一行用补0确定列数,补0的数量等于input的列数-1,用X1的列数确定行数;X1每一行的每一个元素,在本行的Toeplitz矩阵中都做一次开头,然后在Toeplitz矩阵中,上一行到下一行都是向后出栈一位。就像下图一样:
将每一行的Toeplitz矩阵中命名为Xi,由Xi得大的Toeplitz矩阵,与被拉成一条的Y相乘得到的矩阵整理就是卷积的结果了。
然后这个结果和网上一搜就能找到的卷积运算方法结果一致:
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。