當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python tf.nn.depthwise_conv2d用法及代碼示例


深度二維卷積。

用法

tf.nn.depthwise_conv2d(
    input, filter, strides, padding, data_format=None, dilations=None, name=None
)

參數

  • input 4-D,形狀根據 data_format
  • filter 4-D 形狀[filter_height, filter_width, in_channels, channel_multiplier].
  • strides 大小為 4 的一維。input 的每個維度的滑動窗口的步幅。
  • padding 控製在應用卷積之前如何填充圖像。可以是字符串 "SAME""VALID" 指示要使用的填充算法的類型,或者是指示每個維度開始和結束處的顯式填充的列表。當使用顯式填充且 data_format 為 "NHWC" 時,應采用 [[0, 0], [pad_top, pad_bottom], [pad_left, pad_right], [0, 0]] 的形式。當使用顯式填充且 data_format 為 "NCHW" 時,應采用 [[0, 0], [0, 0], [pad_top, pad_bottom], [pad_left, pad_right]] 的形式。
  • data_format 輸入的數據格式。 "NHWC"(默認)或"NCHW"。
  • dilations 大小為 2 的 1-D。我們在空洞卷積中跨 heightwidth 維度對輸入值進行采樣的膨脹率。如果大於 1,則所有步幅值都必須為 1。
  • name 此操作的名稱(可選)。

返回

  • 一個 4-D Tensor 形狀根據 data_format 。例如,對於"NHWC" 格式,形狀為[batch, out_height, out_width, in_channels * channel_multiplier].

給定一個 4D 輸入張量('NHWC' 或 'NCHW' 數據格式)和形狀為 [filter_height, filter_width, in_channels, channel_multiplier] 的濾波器張量,其中包含深度為 1 的 in_channels 卷積濾波器,depthwise_conv2d 對每個輸入通道應用不同的濾波器(從 1通道到每個通道的channel_multiplier 通道),然後將結果連接在一起。輸出具有in_channels * channel_multiplier 通道。

詳細地說,使用默認的 NHWC 格式,

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

必須有 strides[0] = strides[3] = 1 。對於相同水平和垂直步幅的最常見情況,strides = [1, stride, stride, 1]。如果 rate 中的任何值大於 1,我們將執行深度深度卷積,在這種情況下,strides 張量中的所有值都必須等於 1。

使用示例:

x = np.array([
    [1., 2.],
    [3., 4.],
    [5., 6.]
], dtype=np.float32).reshape((1, 3, 2, 1))
kernel = np.array([
    [1., 2.],
    [3., 4]
], dtype=np.float32).reshape((2, 1, 1, 2))
tf.nn.depthwise_conv2d(x, kernel, strides=[1, 1, 1, 1],
                       padding='VALID').numpy()
  array([[[[10., 14.],
           [14., 20.]],
          [[18., 26.],
           [22., 32.]]]], dtype=float32)
tf.nn.depthwise_conv2d(x, kernel, strides=[1, 1, 1, 1],
                       padding=[[0, 0], [1, 0], [1, 0], [0, 0]]).numpy()
  array([[[[ 0.,  0.],
           [ 3.,  4.],
           [ 6.,  8.]],
          [[ 0.,  0.],
           [10., 14.],
           [14., 20.]],
          [[ 0.,  0.],
           [18., 26.],
           [22., 32.]]]], dtype=float32)

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.nn.depthwise_conv2d。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。