tensorflow 1.0 學習:卷積層


在tf1.0中,對卷積層重新進行了封裝,比原來版本的卷積層有了很大的簡化。

一、舊版本(1.0以下)的卷積函數:tf.nn.conv2d

conv2d(
    input,
    filter,
    strides,
    padding,
    use_cudnn_on_gpu=None,
    data_format=None,
    name=None
)

該函數定義在tensorflow/python/ops/gen_nn_ops.py

參數:

    • input: 一個4維Tensor(N,H,W,C). 類型必須是以下幾種類型之一: half, float32, float64.
    • filter: 卷積核. 類型和input必須相同,4維tensor, [filter_height, filter_width, in_channels, out_channels],如[5,5,3,32]
    • strides:  在input上切片采樣時,每個方向上的滑窗步長,必須和format指定的維度同階,如[1, 2, 2, 1]
    • padding: 指定邊緣填充類型: "SAME", "VALID". SAME表示卷積后圖片保持不變,VALID則會縮小。
    • use_cudnn_on_gpu: 可選項,bool型。表示是否在GPU上用cudnn進行加速,默認為True.
    • data_format: 可選項,指定輸入數據的格式: "NHWC"或 "NCHW", 默認為"NHWC"
      NHWC格式指[batch, in_height, in_width, in_channels]
      NCHW格式指[batch, in_channels, in_height, in_width]
    • name: 操作名,可選.
示例:
conv1=tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') 

 

二、1.0版本中的卷積函數:tf.layers.conv2d

conv2d(
    inputs,
    filters,
    kernel_size,
    strides=(1, 1),
    padding='valid',
    data_format='channels_last',
    dilation_rate=(1, 1),
    activation=None,
    use_bias=True,
    kernel_initializer=None,
    bias_initializer=tf.zeros_initializer(),
    kernel_regularizer=None,
    bias_regularizer=None,
    activity_regularizer=None,
    trainable=True,
    name=None,
    reuse=None
)

定義在tensorflow/python/layers/convolutional.py.

參數多了很多,但實際用起來,卻更簡單。

  • inputs: 輸入數據,4維tensor.
  • filters: 卷積核個數。
  • kernel_size:卷積核大小,如【5,5】。如果長寬相等,也可以直接設置為一個數,如kernel_size=5
  • strides: 卷積過程中的滑動步長,默認為[1,1]. 也可以直接設置為一個數,如strides=2
  • padding: 邊緣填充,'same' 和'valid‘選其一。默認為valid
  • data_format: 輸入數據格式,默認為channels_last ,即 (batch, height, width, channels),也可以設置為channels_first 對應 (batch, channels, height, width).

  • dilation_rate: 微步長卷積,這個比較復雜一些,請百度.

  • activation: 激活函數.
  • use_bias: Boolean型,是否使用偏置項.
  • kernel_initializer: 卷積核的初始化器.
  • bias_initializer: 偏置項的初始化器,默認初始化為0.
  • kernel_regularizer: 卷積核化的正則化,可選.
  • bias_regularizer: 偏置項的正則化,可選.
  • activity_regularizer: 輸出的正則化函數.
  • trainable: Boolean型,表明該層的參數是否參與訓練。如果為真則變量加入到圖集合中 GraphKeys.TRAINABLE_VARIABLES (see tf.Variable).
  • name: 層的名字.
  • reuse: Boolean型, 是否重復使用參數.
示例:

conv1=tf.layers.conv2d(
      inputs=x,
      filters=32,
      kernel_size=5,
      padding="same",
      activation=tf.nn.relu,
kernel_initializer=tf.TruncatedNormal(stddev=0.01))

更復雜一點的:

conv1 = tf.layers.conv2d(batch_images, 
                         filters=64,
                         kernel_size=7,
                         strides=2,
                         activation=tf.nn.relu,
                         kernel_initializer=tf.TruncatedNormal(stddev=0.01)
                         bias_initializer=tf.Constant(0.1),
                         kernel_regularizer=tf.contrib.layers.l2_regularizer(0.003),
                         bias_regularizer=tf.contrib.layers.l2_regularizer(0.003),
                         name='conv1')

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM