容易混淆的卷积网络使用的备忘笔记【觉得重要的就记】

1、关于卷积网络的降维,挺多****讲的不明不白,实战也是把一些隐藏点忽略带过,找到吴恩达老师的****一看,很多细节的点都有详细提到,建议大家学完一门课程可以回看吴恩达老师的深度学习课程。

在一个[nxn]7x7的图像数据,使用[fxf]3x3的filter或者kernel来扫描图像,假设conv2d的padding为p, 卷积步长stride s为2,那么其转换后的换算为[(n+2p-f)/s +1, (n+2p-f)/s +1]的矩阵,比较完整阐述了该转换的过程。这挺重要的,因为encoder很简单,但是decoder的复原换算对转换的计算很重要。初学者容易出现两个矩阵比较loss的时候出现不匹配的情况。容易混淆的卷积网络使用的备忘笔记【觉得重要的就记】 

2.关于Conv2D的padding选项,有valid选项和same选项:

valid选项是告诉函数,该图像经历filter之前不需要padding。过滤换算后就是[n-f+1, n-f+1]的矩阵,如6x6的图像,3x3的过滤器,转换后得到4x4的矩阵图像。

而same选项告诉函数,该图像经历filter之前需要进行padding,过滤换算后就是[n+2p-f+1, n+2p-f+1]的矩阵, 如何判断我们要设置多少的padding来保证我们的输出图像与输入图像一样呢? 我们可以让n+2p-f+1=n,化简后得到p = (f-1)/2,意味着我们是基于我们的filter的尺寸来决定padding的值,

如6x6的图像,3x3的过滤器,如果我们希望输出的图像是6x6,基于我们的filter尺寸3x3可以知:p = (3-1)/ 2 = 1, 也就是经历filter前需要将原6x6的图像上下左右填充一个1像素的border作为padding。

如6x6的图像,5x5的过滤器,如果我们希望输出的图像是6x6,基于我们的filter尺寸5x5可以知:p = (5-1)/ 2 = 2, 也就是经历filter前需要将原6x6的图像上下左右填充一个2像素的border作为padding。容易混淆的卷积网络使用的备忘笔记【觉得重要的就记】

3.前面我们只是对单层的图像进行filter操作,但实际生活中,我们更多的是面对多维的图像,比如RGB三通道颜色的图片,意味着原来的6x6x1将变成6x6x3的多维多通道矩阵,同样我们可以使用多层filter来应对该状况【包括可以单独对某个通道进行边缘检测等操作】。那么一种filter应对一种检测方式,如果我们需要多种检测方式呢?我们可以增加filter种类的个数来达成目的。比如下图黄色的三层filter做的是横向的边缘检测,橙色的三层filter做的是纵向的边缘检测,每个filter的平面结果堆叠起来,就成为了多个filter处理后的结果。

比如:6x6x3的多维图像,经过2个3x3x3的多维filter后,各自产生两个4x4不带padding和stride的矩阵,将他们堆叠起来我们获得4x4x2的结果。意味着nxn多维图像和nf个多维filter产生结果会是[n-f+1, n-f+1, nf] 的矩阵

容易混淆的卷积网络使用的备忘笔记【觉得重要的就记】 

4.透过上面前三步的学习,这里举了一个例子来阐述一张39x39的彩色照片如何透过卷积网络进行filter采样降低梯度。

熟记公式:[ (n+2p -f) / s +1, (n+2p -f) / s +1, filter_num]

[39x39x3] => (filter=3, stride=1,padding=0, filter_num=10)=> [37x37x10]

[37x37x10] =>(filter=5, stride=2,padding=0, filter_num=20)=> [17x17x20]

[17x17x20] =>(filter=5, stride=2,padding=0, filter_num=40)=> [7x7x40]

[7x7x40] => flatten[张量扁平化] => [1960, 1] => softmax => logits

容易混淆的卷积网络使用的备忘笔记【觉得重要的就记】