深度学习之卷积和反卷积tensorflow

ps 零零总总接触深度学习有1年了,虽然时间是一段一段的。现在再拾起来做一个新的项目,有些东西又要重新理解,感觉麻烦。现在就再次学习时候有些困惑的地方捋一遍。

1.卷积

说到卷积,我现在还有印象的是大学里《信号与系统》和《数字信号处理》两书中的离散信号的卷积。简单来你说就是一个信号固定,一个信号来移位相乘,其中还要区分周期信号和非周期信号(具体有点忘了)。现在要理解图像卷积先理解一维卷积。先上一个知乎上的解释:

那说到二维卷积,自己百度一下公式如下:

那么具体到深度学习中的卷积计算如下:

关键的来了说一下自己的理解。1.首先把G(i-m,j-n)比作卷积核,那么这一项中的两个负号就相当于是转了180度。你想想在二维坐标中一个的坐标值(x1,y1)加一个负号不就是旋转了180度么。2.其次前面的i和j就是相当于用来确定卷积核相对于待处理矩阵的位置。他们是没有重叠,部分重叠,还是完全重叠是靠这俩个参数决定的。3.你再反回去看下这个例子,你就会发现它其实没有全卷积。他只是为了让卷积前后的矩阵大小相同就卷积前加了一行一列的0,故他只是卷积部分,如果是全卷积的话卷积后的大小是x矩阵边长4加上卷积核边长3减去1。最后得到6*6的矩阵是全卷积。

2.反卷积

       很多攻略都是什么图解反卷积,但是看的还是模棱两可。而且图看起来跟卷积相差不大(一个变大,一个变小)。但是后来我看到了一本电子书上计算实例结合之前的卷积例子才明白一个事实:反卷积注意也是‘卷积’只是多了一个‘反’(也有称为逆)字。说到底计算过程跟上面卷积一样,那正常的全卷积结果矩阵也是待卷积矩阵边长加上卷积核边长减去1。那么怎么体现‘反’字呢,其实也很简单只是将卷积的卷积核在转180度后作为反卷积操作的卷积核。接着开始卷积计算就是再将这个卷积核转180度(其实就最开始卷积计算的卷积核转了360度)而后移位相乘即可。可能你有点绕晕了,下面是在知乎看到的解释:

一句话解释:逆卷积相对于卷积在神经网络结构的正向和反向传播中做相反的运算。逆卷积(Deconvolution)比较容易引起误会,转置卷积(Transposed Convolution)是一个更为合适的叫法。C为卷积核。

tensorflow中的反卷积函数:tf.nn.conv2d_transpose ,而且还有3维反卷积函数。

参考:https://blog.csdn.net/u013539952/article/details/80610260

https://www.zhihu.com/question/43609045

猜你喜欢

转载自blog.csdn.net/qq_36401512/article/details/85095545