提问者:小点点

tf中的“相同”和“有效”填充之间有什么区别。nn。最大的tensorflow池?


什么是'SAME'和'VALID'填充之间的区别在tf.nn.max_pooltenorflow

在我看来,“VALID”意味着在执行max pool时,边缘外不会有零填充。


共3个答案

匿名用户

如果你喜欢ascii艺术:

>

  • “有效”=无填充:

       inputs:         1  2  3  4  5  6  7  8  9  10 11 (12 13)
                      |________________|                dropped
                                     |_________________|
    

    “相同”=零填充:

                   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。没有填充发生。

    匿名用户

    我举个例子让它更清楚:

    • x:输入形状的图像[2,3],1通道
    • valid_pad:带2x2内核、步幅2和VALID填充的最大池。
    • same_pad:最大池与2x2内核,步幅2和SAME填充(这是经典的方式去)

    输出形状为:

    • valid\u pad:此处没有填充,因此输出形状为[1,1]
    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.]