【问题标题】:What does the padding of tf.nn.conv2d_transpose do?tf.nn.conv2d_transpose 的填充有什么作用?
【发布时间】:2018-01-28 13:26:19
【问题描述】:

众所周知,我们可以通过填充模式计算输出tensor的形状conv2dalgorithm很清楚,但我对conv2d_transpose很困惑,它是否填充输入张量然后调用conv2d?它在哪里转置过滤器或输入?如何根据填充模式计算输出张量的形状,SAMEVALIDconv2d_transpose

【问题讨论】:

    标签: tensorflow convolution deconvolution


    【解决方案1】:

    填充对于 conv2d_transpose 意味着什么?

    'SAME' 意味着简单地将输入形状乘以步幅。例如,如果输入 shape 的高度和宽度为 7,而 conv2d_transpose 的 padding=same 和 strides=3,那么输出 shape 的高度和宽度将为 7x3 = 21。

    'VALID' 几乎相同。从“SAME”开始,然后检查 kernel_size 与步幅的比较。如果它更大,则将该数量添加到高度和宽度。为什么?因为随着内核在图像上移动以进行卷积(一次通过罢工量),最后一个内核将通过差异悬在图像上。想象上面的例子,输入的高度和宽度为 7,这次 padding=valid,strides=3,kernel=5。输出的高度和宽度将为 7x3 + (5-3)。

    在这两种情况下,如果内核小于步幅,您只会在输出中得到很多零。为什么?考虑一下 stride 的作用......

    对于给定的步幅值,输入图像增加了很多倍。步幅为 3 使输入图像宽和高 3 倍。原始值占据第三个位置,其余的用 zeros 填充!对于 padding=valid,还有我们之前谈到的额外内容。

    kernel_size 是在图像上进行卷积的核的大小,它在图像上按步长移动。因此,如果 kernel_size 为 1,步幅为 3,那么您的输出大部分为零。

    示例相同

    >>> conv2d_tr = tf.keras.layers.Conv2DTranspose(5,kernel_size=3,padding='same',strides=2)
    >>> conv2d_tr(np.zeros([3,2,2,4],dtype=np.float32)).numpy().shape
    
    (3, 4, 4, 5)
    

    示例 VALID(比 strides 更大的内核)

    >>> conv2d_tr = tf.keras.layers.Conv2DTranspose(5,kernel_size=3,padding='valid',strides=2)
    >>> conv2d_tr(np.zeros([3,10,10,4],dtype=np.float32)).numpy().shape
    
    (3, 21, 21, 5)
    

    示例 VALID(内核等于或小于步幅)

    >>> conv2d_tr = tf.keras.layers.Conv2DTranspose(5,kernel_size=2,padding='valid',strides=2)
    >>> conv2d_tr(np.zeros([3,2,2,4],dtype=np.float32)).numpy().shape
    
    (3, 20, 20, 5)
    

    小内核跨步为零的示例

    >>> conv2d_tr = tf.keras.layers.Conv2DTranspose(1,kernel_size=1,padding='same',strides=2)
    >>> conv2d_tr(np.ones([1,2,2,3],dtype=np.float32)).numpy().shape
    (1, 4, 4, 1)
    
    >>> conv2d_tr(np.ones([1,2,2,3],dtype=np.float32)).numpy()
    
    array([[[[0.702],[0.   ],[0.702],[0.   ]],
            [[0.   ],[0.   ],[0.   ],[0.   ]],
            [[0.702],[0.   ],[0.702],[0.   ]],
            [[0.   ],[0.   ],[0.   ],[0.   ]]]], dtype=float32)
    

    【讨论】:

      猜你喜欢
      • 2016-02-26
      • 1970-01-01
      • 2017-01-18
      • 2016-04-29
      • 2020-04-28
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      相关资源
      最近更新 更多