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


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


計算N-D 卷積的總和(實際上是cross-correlation)。

用法

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

參數

  • input 一個 (N+2)-D Tensor 類型為 T ,形狀 [batch_size] + input_spatial_shape + [in_channels] 如果 data_format 不以 "NC" 開頭(默認),或者 [batch_size, in_channels] + input_spatial_shape 如果 data_format 以 "NC" 開頭.
  • filters (N+2)-D Tensorinput 具有相同類型和形狀 spatial_filter_shape + [in_channels, out_channels]
  • padding 一個字符串,或者"VALID"或者"SAME".填充算法。"valid"表示沒有填充。"same"導致在輸入的左/右或上/下均勻填充,以便在步幅為 1 時輸出具有與輸入相同的高度/寬度尺寸。請參閱這裏了解更多信息。
  • strides 可選的。 N 個整數的序列 >= 1。指定輸出步幅。默認為 [1]*N。如果任何 strides 值 > 1,則 dilation_rate 的所有值都必須為 1。
  • dilations 可選的。 N 個整數的序列 >= 1。指定濾波器上采樣/輸入下采樣率。在文獻中,有時將相同的參數稱為 input stridedilation 。用於卷積的有效濾波器大小將為 spatial_filter_shape + (spatial_filter_shape - 1) * (rate - 1) ,通過在每個空間維度 i 中原始濾波器的連續元素之間插入 (dilation_rate[i]-1) 零來獲得。如果 dilation_rate 的任何值 > 1,則所有步幅值都必須為 1。
  • name 返回張量的可選名稱。
  • data_format 一個字符串或無。指定input 和輸出的通道維度是最後一個維度(默認,或者如果data_format 不以"NC" 開頭),還是第二個維度(如果data_format 以"NC" 開頭)。對於 N=1,有效值為 "NWC"(默認)和 "NCW"。對於 N=2,有效值為 "NHWC"(默認)和 "NCHW"。對於 N=3,有效值為 "NDHWC"(默認)和 "NCDHW"。

返回

  • A Tensor與相同類型input形狀的
    `[batch_size] + output_spatial_shape + [out_channels]`

    如果 data_format 為 None 或不以 "NC" 開頭,或

    `[batch_size, out_channels] + output_spatial_shape`

    如果 data_format 以 "NC" 開頭,其中 output_spatial_shape 取決於 padding 的值。

    如果填充 == "SAME":output_spatial_shape[i] = ceil(input_spatial_shape[i] /strides[i])

    如果填充 == "VALID":output_spatial_shape[i] = ceil((input_spatial_shape[i] - (spatial_filter_shape[i]-1) * dilation_rate[i]) /strides[i])。

拋出

  • ValueError 如果輸入/輸出深度與 filters 形狀不匹配,如果填充不是 "VALID""SAME" ,或者如果 data_format 無效。

這也支持通過可選的strides 參數輸出跨步或通過可選的dilations 參數支持atrous 卷積(也稱為帶孔的卷積或擴張卷積,基於法語單詞"trous" 表示英語中的孔)。然而,目前,atrous 卷積不支持輸出跨步。

具體來說,在data_format不以"NC"開頭的情況下,給定一個秩為(N+2)的input形狀的張量

[num_batches, input_spatial_shape[0], ..., input_spatial_shape[N-1], num_input_channels],

a rank (N+2) filters 形狀張量

[spatial_filter_shape[0], ..., spatial_filter_shape[N-1], num_input_channels, num_output_channels],

一個可選的 dilations 形狀 N 的張量(默認為 [1]N),指定濾波器上采樣/輸入下采樣率,以及一個可選的 N 步長列表(默認為 [1]N),這將為每個 N-D 空間輸出計算位置(x[0],...,x[N-1]):

output[b, x[0], ..., x[N-1], k] =
      sum_{z[0], ..., z[N-1], q}
          filter[z[0], ..., z[N-1], q, k] *
          padded_input[b,
                       x[0]*strides[0] + dilation_rate[0]*z[0],
                       ...,
                       x[N-1]*strides[N-1] + dilation_rate[N-1]*z[N-1],
                       q]

其中 b 是批次的索引,k 是輸出通道號,q 是輸入通道號,z 是過濾器內的N-D 空間偏移量。在這裏,padded_input 是通過使用 (spatial_filter_shape-1) * dilation_rate + 1 的有效空間濾波器形狀和輸出跨步 strides 對輸入進行零填充來獲得的。

如果 data_format 確實以 "NC" 開頭,則 input 和輸出(但不是 filters )簡單地轉置如下:

卷積(輸入,data_format,**kwargs)= tf.transpose(卷積(tf.transpose(輸入,[0] + range(2,N+2)+ [1]),**kwargs),[0 , N+1] + 範圍(1, N+1))

要求 1 <= N <= 3。

相關用法


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