1. 程式人生 > >TensorFlow 入門 第一課--基本函式學習(2):tf.nn.conv2d 、tf.contrib.layers.flatten、tf.nn.max_pool 詳解

TensorFlow 入門 第一課--基本函式學習(2):tf.nn.conv2d 、tf.contrib.layers.flatten、tf.nn.max_pool 詳解

Tensorflow 提供了一些內建的API實現了CNN網路結構中的卷積,池化,全連線網路等運算操作。

  • tf.nn.conv2d(input,filter, strides, padding, data_format=’NHWC’) 
    完成CNN卷積運算,其中:

    input: 4-D 的Tensor, 每個dimension的意思由data_format指定,預設是[batch, Height, Width, Channel]。batch表示有多少個這樣的sample。Height/Width是圖片的高度/寬度,Channel決定了圖片是灰度圖還是彩色圖。若是灰度圖就只有一個 [Height, Width]的2維矩陣,若是彩色圖則有3個這樣的矩陣,每個矩陣分別表示畫素R/G/B的值。

    filter: 有時也稱之為kernel。這個filter也是一個4-D的Tensor,每個dimension分別表示 [filter_height, filter_width, in_channels, out_channels]。通常地稱[filter_height, filter_width, in_channels]為單個filter的size,而且filter_height, filter_width一般為奇數並且相等。in_channel必須跟input引數中的Channel相等,卷積運算時,從input中取一個大小為[filter_height, filter_width, in_channels

    ]的slice window跟 單個filter做卷積運算。out_channels表示有多少個這樣的filter。因為filter一般用於特徵的抽取,所以out_channels決定了卷積層最終輸出的channel(depth)。

    strides: 4-D的Tensor, 表示在對input做卷積運算時,在每個dimension上的步長。跟input引數一樣,每個dimension的順序由data_format決定。通常地在Height, Width上步長為1或者2,而batch, Channel的步長設定為1。

    padding: “SAME” 或者 “Valid”。Same表示卷積層的輸出的height/width 跟input層的height/width相同。Valid表示no padding則由公式(height−filter_heigth)/stride_height+1

     (width也是一樣)。

  • tf.nn.max_pool(value, ksize = [1,f,f,1], strides = [1,s,s,1], padding = ‘SAME’, data_format=’NHWC’) 
    池化運算。 
    value: 4-D的tensor, 一般地就是上面conv2d的輸出,具體每個dimension的意義跟conv2d的input引數一樣 
    ksize: 定義slice window的大小,它會在輸入引數中選擇跟slice window想同大小的window,並取其中的最大值。
  • tf.contrib.layers.flatten(P) 
    對於輸入的P,將每一個example展開為1-D的Tensor, 但是依然保留batch-size。它返回一個[batch_size, k]的Tensor。通常在CNN的最後一步連線到Fully Connected 的網路之前會將其展開,例如CNN的conv層輸出的tensor的shape為[batch_size, height, width, channel], 剛展開會就是[batch_size, height * width * channel]。
  • tf.argmax(input , axis =None, name = None, dimension = None )此函式是對矩陣按行或列計算最大值
    引數:
    • input:輸入Tensor
    • axis:0表示按列,1表示按行
    • name:名稱
    • dimension:和axis功能一樣,預設axis取值優先。新加的欄位
    返回:Tensor  一般是行或列的最大值下標向量