卷积后尺寸计算

定义几个参数

  • 输入图片大小 W×W
  • Filter大小 F×F
  • 步长 S
  • padding的像素数 P

 

首先讲tensorflow中

 卷积后尺寸计算_第1张图片

 

 SAME: ceil(5/2)=3

VAILD

p = 0

(5-3+0)/2+1 = 2

卷积中的参数“SAME”,和‘VALID’决定了输出尺寸的计算公式:
如果参数是‘’SAME'',那么计算只与步长有关,直接除以步长(除不尽,向上取整)
如果参数是‘VALID’,那么计算公式如上:N = (W − F + 2P )/S+1

 

这里对比max_pooling中的SAME VALID

在我看来,'VALID'意味着做最大池时,边外没有零填充。
根据A guide to convolution arithmetic for deep learning,它表示池化操作符中没有填充,即只使用tensorflow的'VALID'。但是什么是tensorflow中最大池的'SAME'填充?

最佳解决方案
我举一个例子来说明一点:
x:shape[2,3],1通道的输入图像
valid_pad:具有2x2内核,步幅2和VALID填充的最大池化。
same_pad:最大池化,2x2内核,步幅2和SAME填充(这是经典的方法)
输出形状为:
valid_pad:这里没有填充,所以输出形状为[1,1]
same_pad:在这里,我们将图像填充到形状[2,4](使用-inf,然后应用最大池化),因此输出形状为[1,2]

x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.]])

x = tf.reshape(x, [1, 2, 3, 1])  # give a shape accepted by tf.nn.max_pool

valid_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='VALID')
same_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME')

valid_pad.get_shape() == [1, 1, 1, 1]  # valid_pad is [5.]
same_pad.get_shape() == [1, 1, 2, 1]   # same_pad is  [5., 6.]

  

其次讲pytorch中

 

 

 

最后讲理论推导:


N = (W − F + 2P )/S+1
输出图片大小为 N×N
 

转载于:https://www.cnblogs.com/ivyharding/p/11147686.html

你可能感兴趣的:(人工智能)