【Deep Learning】深度学习之卷积核详解

转自:
https://zm8.sm-tc.cn/?src=l4uLj4zF0NCIiIjRnJGdk5CYjNGckJLQporSuZqWuZqW0J6Ni5ack5qM0MnHz8%2FKzsbRl4uSkw%3D%3D&uid=6ddd1a57ac6d39a2fd15083871fed492&hid=99f3e47feb675bdd11f130781b4670e3&pos=4&cid=9&time=1539675448322&from=click&restype=1&pagetype=0020004002000402&bu=ss_doc&query=卷积核&mode=&v=1&force=true&wap=false&uc_param_str=dnntnwvepffrgibijbprsvdsdichei
我重新做出排版。

一个filter作用于一个图片上

直接举例进行说明输出图片的长和宽。
输入照片为:32 * 32 * 3
在这里插入图片描述 这是用一个Filter得到的结果,即使一个activation map。(filter 总会自动扩充到和输入照片一样的depth)。

多个filter作用于一个图片上

当我们用6个5*5的Filter时,我们将会得到6个分开的activation maps
如图所示:
在这里插入图片描述 得到的“新照片”的大小为:28 * 28 * 6.
其实,每个卷积层之后都会跟一个相应的激活函数(activation functions)
在这里插入图片描述

stride步长和padding填充

stride

微观上,假设现在input为7 * 7,Filter尺寸为3 * 3,output过程如下所示:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
最终得到一个5*5的output。

假设,input为7 * 7,Filter尺寸为3 * 3,stride(步长)为2,则output过程如下所示:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
注:在这个例子中stride不能为3,因为那样就越界了。

总的来说
Output size=(N-F)/stride +1

padding

当有填充(pad)时,例如对一个input为7 * 7进行pad=1填充,Filter为3 * 3,stride=1,会得到一个7 * 7的output
在这里插入图片描述
Output size=(N-F+2*pad)/stride +1

注:0填充(pad)的主要目的是因为我们在前面的图中所示的那样,一直用5*5的Filter进行卷积,会导致体积收缩的太快,不利于特征的提取。

举例说明:
在这里插入图片描述在这里插入图片描述 在这里要注意一下1*1的卷积核,为什么呢?

举例:一个56 * 56 * 64的input,用32个1 * 1的卷积核进行卷积(每一个卷积核的尺寸为1 * 1 * 64,执行64维的点乘操作),将得到一个56 * 56 * 32的output,看到输出的depth减少了,也就是降维,那么parameters也会相应的减少。

pooling 池化

下面介绍一下Pooling(池化)操作:
在这里插入图片描述 将represention变小,易于操作和控制,对每一个activation map单独进行操作。

用的最多的是最大池化(MAX POOLING):
在这里插入图片描述
Output size=(N-F)/S +1

猜你喜欢

转载自blog.csdn.net/qq_33431368/article/details/87631634