下面是二維卷積函數的樣例和解釋,一維或更高維的卷積函數與之類似
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對象