tf.nn.conv2d 與tf.layers.conv2d的區別


下面是二維卷積函數的樣例和解釋,一維或更高維的卷積函數與之類似

1、tf.nn.conv2d

tf.nn.conv2d(input,  # 張量輸入
            filter, # 卷積核參數
            strides, # 步長參數
            padding, # 卷積方式
            use_cudnn_on_gpu=None, # 是否是gpu加速
            data_format=None,  # 數據格式,與步長參數配合,決定移動方式
            name=None): # 名字,用於tensorboard圖形顯示時使用

關鍵參數如下

input.shape=[batch, in_height, in_width, in_channels]

filter.shape= [filter_height, filter_width, in_channels, out_channels ]

strides = [1, stride, stride, 1].
必須滿足strides[0] = strides[3] = 1.
在大多數情況下 strides = [1, stride, stride, 1].

2. tf.layers.conv2d

這是tensorflow 更高一級的api,和keras.layer類似

conv2d(inputs, # 輸入的張量
   filters, # 卷積過濾器的數量
    kernel_size, # 卷積窗口的大小
    strides=(1, 1), # 卷積步長
    padding='valid', # 可選,默認為 valid,padding 的模式,有 valid 和 same 兩種,大小寫不區分。
    data_format='channels_last', # 可選,默認 channels_last,分為 channels_last 和 channels_first 兩種模式,代表了輸入數據的維度類型,如果是 channels_last,那么輸入數據的 shape 為 (batch, height, width, channels),如果是 channels_first,那么輸入數據的 shape 為 (batch, channels, height, width)
    dilation_rate=(1, 1),# 可選,默認為 (1, 1),卷積的擴張率,如當擴張率為 2 時,卷積核內部就會有邊距,3×3 的卷積核就會變成 5×5。
    activation=None, # 可選,默認為 None,如果為 None 則是線性激活。
    use_bias=True, # 可選,默認為 True,是否使用偏置。
    kernel_initializer=None, # 可選,默認為 None,即權重的初始化方法,如果為 None,則使用默認的 Xavier 初始化方法。
    bias_initializer=<tensorflow.python.ops.init_ops.Zeros object at 0x000002596A1FD898>, # 可選,默認為零值初始化,即偏置的初始化方法。
    kernel_regularizer=None,# 可選,默認為 None,施加在權重上的正則項。
    bias_regularizer=None, # 可選,默認為 None,施加在偏置上的正則項。
    activity_regularizer=None, # 可選,默認為 None,施加在輸出上的正則項。
    kernel_constraint=None, # 可選,默認為 None,施加在權重上的約束項。
    bias_constraint=None, # 可選,默認為 None,施加在偏置上的約束項。
    trainable=True, # 可選,默認為 True,布爾類型,如果為 True,則將變量添加到 GraphKeys.TRAINABLE_VARIABLES 中。
    name=None, # 可選,默認為 None,卷積層的名稱。
    reuse=None) # 可選,默認為 None,布爾類型,如果為 True,那么如果 name 相同時,會重復利用。

input 和tf.nn.conv2d 一樣,必須是4維張量,input.shape=[batch, in_height, in_width, in_channels]
filters:整數,表示輸出空間的維數(即卷積過濾器的數量),對應於tf.nn.conv2d中的out_channels
kernel_size:一個整數,或者包含了兩個整數的元組/隊列,表示卷積窗的高和寬。如果是一個整數,則寬高相等。 對應於tf.nn.conv2d中的(filter_height, filter_width)

 

2. keras.layers.conv2d

keras.layers.convolutional.Conv2D(filters, kernel_size, strides=(1, 1), 
  padding='valid',
  data_format=None,
  dilation_rate=(1, 1),
  activation=None,
  use_bias=True,
  kernel_initializer='glorot_uniform',
  bias_initializer='zeros',
  kernel_regularizer=None,
  bias_regularizer=None,
  activity_regularizer=None,
  kernel_constraint=None,
  bias_constraint=None)

 

filters:卷積核的數目(即輸出的維度)

kernel_size:單個整數或由兩個整數構成的list/tuple,卷積核的寬度和長度。如為單個整數,則表示在各個空間維度的相同長度。

strides:單個整數或由兩個整數構成的list/tuple,為卷積的步長。如為單個整數,則表示在各個空間維度的相同步長。任何不為1的strides均與任何不為1的dilation_rate均不兼容

padding:補0策略,為“valid”, “same” 。“valid”代表只進行有效的卷積,即對邊界數據不處理。“same”代表保留邊界處的卷積結果,通常會導致輸出shape與輸入shape相同。

activation:激活函數,為預定義的激活函數名(參考激活函數),或逐元素(element-wise)的Theano函數。如果不指定該參數,將不會使用任何激活函數(即使用線性激活函數:a(x)=x)

dilation_rate:單個整數或由兩個個整數構成的list/tuple,指定dilated convolution中的膨脹比例。任何不為1的dilation_rate均與任何不為1的strides均不兼容。

data_format:字符串,“channels_first”或“channels_last”之一,代表圖像的通道維的位置。該參數是Keras 1.x中的image_dim_ordering,“channels_last”對應原本的“tf”,“channels_first”對應原本的“th”。以128x128的RGB圖像為例,“channels_first”應將數據組織為(3,128,128),而“channels_last”應將數據組織為(128,128,3)。該參數的默認值是~/.keras/keras.json中設置的值,若從未設置過,則為“channels_last”。

use_bias:布爾值,是否使用偏置項

kernel_initializer:權值初始化方法,為預定義初始化方法名的字符串,或用於初始化權重的初始化器。參考initializers

bias_initializer:權值初始化方法,為預定義初始化方法名的字符串,或用於初始化權重的初始化器。參考initializers

kernel_regularizer:施加在權重上的正則項,為Regularizer對象

bias_regularizer:施加在偏置向量上的正則項,為Regularizer對象

activity_regularizer:施加在輸出上的正則項,為Regularizer對象

kernel_constraints:施加在權重上的約束項,為Constraints對象

bias_constraints:施加在偏置上的約束項,為Constraints對象

 


免責聲明!

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



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