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


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


在給定 input 和 4-D filters 張量的情況下計算二維卷積。

用法

tf.nn.conv2d(
    input, filters, strides, padding, data_format='NHWC', dilations=None,
    name=None
)

參數

  • input 一個Tensor。必須是以下類型之一:half , bfloat16 , float32 , float64。秩至少為 4 的張量。維度順序根據 data_format 的值進行解釋;將 all-but-inner-3 尺寸用作批次尺寸。詳情見下文。
  • filters 一個Tensor。必須與 input 具有相同的類型。形狀為 [filter_height, filter_width, in_channels, out_channels] 的 4-D 張量
  • strides 長度為 1 , 24ints 的 int 或列表。 input 的每個維度的滑動窗口的步幅。如果給定單個值,則會在 HW 維度中複製它。默認情況下,NC 維度設置為 1。維度順序由 data_format 的值確定,詳情請參見下文。
  • padding 無論是string "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 一個可選的 string 來自: "NHWC", "NCHW" 。默認為 "NHWC" 。指定輸入和輸出數據的數據格式。使用默認格式"NHWC",數據按以下順序存儲:batch_shape + [height, width, channels]。或者,格式可以是"NCHW",數據存儲順序為:batch_shape + [channels, height, width]
  • dilations 長度為 1 , 24ints 的 int 或列表,默認為 1。input 的每個維度的膨脹因子。如果給定單個值,則會在 HW 維度中複製它。默認情況下,NC 維度設置為 1。如果設置為 k > 1,則該維度上的每個過濾器元素之間將有 k-1 個跳過的單元格。維度順序由 data_format 的值決定,詳見上文。如果 4-d 張量必須為 1,則批量和深度維度的膨脹。
  • name 操作的名稱(可選)。

返回

  • 一個Tensor。具有與input 相同的類型和相同的外部批次形狀。

input 張量的秩可能為 4 或更高,其中形狀尺寸 [:-3] 被認為是批量尺寸( batch_shape )。

給定一個形狀的輸入張量batch_shape + [in_height, in_width, in_channels]和形狀的過濾器/內核張量[filter_height, filter_width, in_channels, out_channels],此操作執行以下操作:

  1. 將過濾器展平為具有形狀的二維矩陣[filter_height * filter_width * in_channels, output_channels].
  2. 從輸入張量中提取圖像塊以形成形狀的虛擬張量[batch, out_height, out_width, filter_height * filter_width * in_channels].
  3. 對於每個補丁,right-multiplies 過濾器矩陣和圖像補丁向量。

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

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

必須有 strides[0] = strides[3] = 1 。對於相同水平和垂直步幅的最常見情況,strides = [1, stride, stride, 1]

使用示例:

x_in = np.array([[
  [[2], [1], [2], [0], [1]],
  [[1], [3], [2], [2], [3]],
  [[1], [1], [3], [3], [0]],
  [[2], [2], [0], [1], [1]],
  [[0], [0], [3], [1], [2]], ]])
kernel_in = np.array([
 [ [[2, 0.1]], [[3, 0.2]] ],
 [ [[0, 0.3]],[[1, 0.4]] ], ])
x = tf.constant(x_in, dtype=tf.float32)
kernel = tf.constant(kernel_in, dtype=tf.float32)
tf.nn.conv2d(x, kernel, strides=[1, 1, 1, 1], padding='VALID')
<tf.Tensor:shape=(1, 4, 4, 2), dtype=float32, numpy=..., dtype=float32)>

相關用法


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