猿问

tensorflow的tf.nn.max_pool中'SAME'和'VALID'填充有什么区别?

什么是“相同”和“有效”填充之间的区别tf.nn.max_pool的tensorflow?


在我看来,'VALID'意味着当我们做最大池时,边缘外没有零填充。


根据深度学习的卷积算法指南,它表示池操作符中没有填充,即只使用'VALID' tensorflow。但是什么是最大池的“相同”填充tensorflow?


慕森卡
浏览 822回答 3
3回答

largeQ

我举一个例子来说明一点:x:输入形状[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_poolvalid_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.]

互换的青春

如果你喜欢ascii art:"VALID" =没有填充:   inputs:         1  2  3  4  5  6  7  8  9  10 11 (12 13)                  |________________|                dropped                                 |_________________|"SAME" =零填充:               pad|                                      |pad   inputs:      0 |1  2  3  4  5  6  7  8  9  10 11 12 13|0  0               |________________|                              |_________________|                                             |________________|在这个例子中:输入宽度= 13滤镜宽度= 6步幅= 5笔记:"VALID" 只会丢掉最右边的列(或最底部的行)。"SAME" 尝试向左和向右均匀填充,但如果要添加的列数是奇数,它将向右添加额外的列,如本示例中的情况(相同的逻辑垂直应用:可能有一个额外的行在底部的零)。编辑:关于这个名字:使用"SAME"填充,如果使用步幅1,则图层的输出将具有与其输入相同的空间维度。使用"VALID"填充,没有“补充”填充输入。该图层仅使用有效的输入数据。

蝴蝶不菲

当stride为1时(更常见的是卷积而不是合并),我们可以想到以下区别:"SAME":输出大小与输入大小相同。这需要过滤器窗口在输入映射外滑动,因此需要填充。"VALID":过滤器窗口保持在输入映射内的有效位置,因此输出大小缩小filter_size - 1。没有填充。
随时随地看视频慕课网APP

相关分类

Python
我要回答