首先,tensorflow中包含的卷积操作是什么?
3359 tensor flow.Google.cn/API _ docs/python/TF/nn/conv 2d
TF.nn.conv2d(input,filter,strides,padding,use_cudnn_on_gpu=True,data_format='NHWC ', dilationg实际上它是固定你的input的格式,NHWC在与你的输入数据的维度对应时[batch_size,Heigth,Width,Channel],NCHW是[ batch _ sision ]
实际上,strides中的参数和这个data_format是一一对应的。 什么意思? 也就是说,采用NHWC方式和strides=[a,b,c,d]时,计算卷积核迁移过程会怎么样呢? 那个在batch的维度上按照step=a的大小进行移动计算。 同样,在每个HWC维度上移动的step是b c d。 这里a,d的值为1,因为必须分别计算batch和channel。 b c的值可以根据情况变化,他们的值与输出的feature map的维度直接相关。
让我们看一下padding=same和valid这两个参数的计算方法。 参考: https://www.Jian Shu.com/p/05c4f 1621 c7e
假设输入的图像大小为W*H
kernel size的大小为k_h*k_w
将h方向的stride设为h,将w方向的stride设为w
请求出新输出的特征图的大小,n_h和n_w
在valid模式下,他只修改原始图
于是,n_h=(h-k_h )/h向上舍入加1; n_w=(w-k_w )/h向上舍入加1;
在SAME模式下,他会在填充时自动补0。
那么什么是必要的时候呢? 这首先要根据公式n_h=H/h进行舍入和n_w=W/w进行舍入,得到最终的输出n_h和n_w,并根据需要将输出的n_h和n_w反向按压到它们的地方,需要补充0。
在h方向上pad_need_H=(n_h -1 ) * h K_h - H
矩阵中每行上方需要添加的像素数如下:
pad_need_H/2整形
矩阵每行下需要添加的像素数为
pad_need_H -pad_need_H/2
同样在w方向上
源代码如下所示。
例如,输入feature map为4*4,kernel size为1*1,strides 1,1,1
需要补充的图则如下
在这里画斜线是填充的0
输入的feature map为2*5 kernel size为2*2,strides为【1,2,1,1】
需要填充的图如下
最后一列是必须填充的0值,最后输出的feature map为1*5
原文: https://blog.csdn.net/Tian dd12/article/details/80271050