TensorFlow函數(shù)教程:tf.nn.convolution

2019-01-31 13:45 更新

tf.nn.convolution函數(shù)

tf.nn.convolution(
    input,
    filter,
    padding,
    strides=None,
    dilation_rate=None,
    name=None,
    data_format=None
)

定義在:tensorflow/python/ops/nn_ops.py.

請參閱指南:神經(jīng)網(wǎng)絡(luò)>卷積運算

計算ND卷積的總和(實際上是互相關(guān)).

這也支持通過可選的strides參數(shù)進行輸出跨步或者通過可選的dilation_rate參數(shù)(也稱為帶孔的卷積或擴張卷積).然而,目前不支持對異常卷積的輸出跨步.

具體地說,在data_format不以“NC”開頭的情況下,給出秩為(N + 2)的input張量,其形狀如下:

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

秩為(N + 2)的filter張量,其形狀為:

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

一個可選的dilation_rate張量,其形狀為[N](默認(rèn)為[1] N),指定濾波器上采樣/輸入下采樣率,以及一個N strides的可選列表(默認(rè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èi)的N-D空間偏移.這里,padded_input通過使用一個形狀為(spatial_filter_shape-1) * dilation_rate + 1的有效的空間過濾器,和輸出跨步strides來對輸入進行零填充獲得的.

在這種情況下,data_format不以"NC"開頭,在input與輸出(但不是filter)被簡單地調(diào)換,如下所示:

convolution(input, data_format, kwargs) = tf.transpose(convolution(tf.transpose(input, [0] + range(2,N+2) + [1]), kwargs), [0, N+1] + range(1, N+1))

這要求:1 <= N <= 3.

參數(shù):

  • input:一個類型為T的ND Tensor,其中,如果data_format不以“NC”(默認(rèn)值)開頭,則形狀為[batch_size] + input_spatial_shape + [in_channels];或者data_format以“NC”開頭,則形狀為[batch_size, in_channels] + input_spatial_shape.
  • filter:與input具有相同類型的N-D Tensor,它的形狀為spatial_filter_shape + [in_channels, out_channels].
  • padding:一個字符串,可以是"VALID"或者"SAME";填充算法.
  • strides: 可選的.N int的順序> = 1.指定輸出步幅.默認(rèn)為[1] * N. 如果步幅的任何值> 1,則dilation_rate的所有值必須為1.
  • dilation_rate: 可選,N ints> = 1的序列,指定濾波器上采樣/輸入下采樣率.在文獻中,相同的參數(shù)有時稱為input stride或dilation;用于卷積的有效濾波器大小將是spatial_filter_shape + (spatial_filter_shape - 1) * (rate - 1),通過在每個空間維度 i 中在原始濾波器的連續(xù)元素之間插入(dilation_rate [i] -1)零來獲得.如果dilation_rate的任何值> 1,則步幅的所有值必須為1.
  • name:返回張量的可選名稱.
  • data_format:字符串或None,指定input和輸出的通道維度是否是最后一個維度(默認(rèn),或者data_format不是以“NC”開頭),還是第二個維度(如果data_format以“NC”開頭)
    對于N = 1,有效值是“NWC”(默認(rèn))和“NCW”;
    對于N = 2,有效值是“NHWC”(默認(rèn))和“NCHW”;
    對于N = 3,有效值為“NDHWC”(默認(rèn))和“NCDHW”.

返回:

一個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,padding值如下:

如果padding ==“SAME”:output_spatial_shape [i] = ceil(input_spatial_shape [i] / strides [i])

如果padding ==“VALID”:output_spatial_shape [i] = ceil((input_spatial_shape [i] - (spatial_filter_shape [i] -1)* dilation_rate [i])/ strides [i]).

可能引發(fā)的異常:

  • ValueError:如果輸入/輸出深度與filter形狀不匹配,填充不是"VALID"或者"SAME",或者data_format無效.
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號