阅读(5.1k) 书签 (0)

TensorFlow函数教程:tf.nn.separable_conv2d

2019-02-01 17:18 更新

tf.nn.separable_conv2d函数

tf.nn.separable_conv2d(
    input,
    depthwise_filter,
    pointwise_filter,
    strides,
    padding,
    rate=None,
    name=None,
    data_format=None
)

定义在:tensorflow/python/ops/nn_impl.py。

带可分离滤波器的2-D卷积。

执行深度卷积,该卷积分别对通道起作用,然后是混合通道的逐点卷积。请注意,这是维度[1,2]和3之间的可分离性,而不是维度1和2之间的空间可分性。

详细地:

output[b, i, j, k] = sum_{di, dj, q, r}
    input[b, strides[1] * i + di, strides[2] * j + dj, q] *
    depthwise_filter[di, dj, q, r] *
    pointwise_filter[0, 0, q * channel_multiplier + r, k]

strides仅控制深度卷积的步幅,因为逐点卷积具有[1,1,1,1]的隐含步幅。必须有strides[0] = strides[3] = 1。对于相同水平和垂直步幅的最常见情况,strides = [1, stride, stride, 1]。 如果rate中的任何值大于1,我们执行有害的深度卷积,在这种情况下,strides张量中的所有值必须等于1。

参数:

  • input:4-D Tensor,shape根据data_format决定。
  • depthwise_filter:4-D Tensor,shape为[filter_height, filter_width, in_channels, channel_multiplier]。包含深度为1的in_channels卷积滤波器。
  • pointwise_filter:4-D Tensor,shape为[1, 1, channel_multiplier * in_channels, out_channels]。点状滤波器在depthwise_filter空间卷积后混合通道。
  • strides:大小为4的1-D,input的每个维度的深度卷积的步幅。
  • padding:字符串,可以是'VALID'或者'SAME'。填充算法。请参阅tf.nn.convolution的“返回”部分获得详细信息。
  • rate:大小为2的1-D。我们在atrous卷积中通过height和width维度对输入值进行采样的扩张率。如果它大于1,那么所有strides值必须为1。
  • name:此操作的名称(可选)。
  • data_format:输入的数据格式。可以是“NHWC”(默认)或“NCHW”。

返回:

一个4-D的Tensor,其shape根据'data_format'决定。例如,对于data_format="NHWC",shape为[batch,out_height,out_width,out_channels]。