CNN杂记

1、CNN输入输出的计算

公式:

OutputSize = ( InputSize + PadSize*2 - FilterSize ) / Stride  + 1

输出大小 = (输入大小 + Pad大小 * 2  - 卷积核大小)/ 步长  + 1

公式中Pad之所以乘2,是因为对于宽度来讲,左右两边都加了Pad,公式中的Pad指单边大小,CNTK中pad=True时,padsize=1

注意事项: 

0)详细参见该文

你知道如何计算CNN感受野吗

https://arxiv.org/pdf/1603.07285.pdf

1)当不能整除步长时,余数取整(加一或舍弃),例如对Mnist操作,输入28,Pad为1,卷积核5,Stride为2时,输出=( 28 + 1*2 - 5)/2 +1 = 25/2 + 1 = 12.5 + 1 = 13 + 1 = 14

也就是说,输入为28*28 ,经过(卷积核大小为5*5,Pad为1,步长为2)的卷积后,输出大小为14*14,如果过滤器Filter有10个,则输出Shape为10*14*14

2)Pad设为Same时的含义,参见该文

FULL:edge_row = kernel_row - 1;   edge_cols = kernel_cols - 1;

SAME:edge_row = (kernel_row - 1) / 2;edge_cols = (kernel_cols - 1) / 2;

VALID:edge_row = edge_cols = 0;

其中edge_row即Pad,kernel_row就是卷积核大小

3)关于cnn各参数的关系,参见CNTK的cnn动画版描述

4)为什么卷积核都是奇数?

https://www.zhihu.com/question/279077251/answer/404918175

设原始图像为n*n维,卷积核尺寸为f*f,在没有padding和stride为1的情况下,输出尺寸为

(n-f+1)*(n-f+1)

在有padding的情况下,padding尺寸为p,输出尺寸为:(n+2p-f+1)*(n+2p-f+1)

在有same padding的情况下,我们希望输出尺寸与输入尺寸一致,所以

n+2p-f+1=n  > p=(f-1)/2

所以我们可以看出,为了使得p取整数,我们需要使用奇数的卷积核尺寸,否则我们可能会面临非对称padding的情况,既左边多一点,或者右边多一点,这样是不合理的。

另外一个重要原因是奇数卷积核尺寸,我们有对称中心点,中心点左边和右边是对称的,上面和下面是对称的。而偶数卷积核则没有这样的中心点。

5) 对full、same、valid三个参数的对比说明(图)

https://blog.csdn.net/zy3381/article/details/43274029

6)cnn平易参考

cnn白话入门

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容