1 tf.nn.conv2d( 2 input, 3 filter, 4 strides, 5 padding, 6 use_cudnn_on_gpu=True, 7 data_format='NHWC', 8 dilations=[1, 1, 1, 1], 9 name=None 10 )
input:輸入數據
filter:過濾器
strides:卷積滑動步長,實際上可以解釋為過濾器的大小
padding:圖像邊填充方式
--------------------------------------------------------------------------------------------->
在這里詳細地對各個參數做出解釋:
input:就是卷積的輸入數據,該輸入數據要求是一個Tensor,所以張量的shape為[batch, in_height, in_width, in_channels],batch為訓練 [ 一個 ] batch圖片數量,這是一個四維向量,所以類型為half
,bfloat16
,float32,
float64.
filter:為一個張量,必須和input是一樣的4D shape。[filter_height, filter_width, in_channels, out_channels],參數的第三維就是input內的第四維
padding:整數型的列表,只有“SAME”和“VALID”兩個值,在這里SAME和VALID的計算需要說明一下
1 #“SAME” 計算方式 2 out_height = ceil(float(in_height)) / float(strides[1]) 3 out_width = ceil(float(in_width)) / float(strides[2]) 4 5 #“VALID”計算方式 6 out_height = ceil(float(in_height - filter_height + 1)) / float(strides[1]) 7 out_width = ceil(float(in_width - filter_width + 1)) / float(strides[2])
strides:在這里直接參考官方API吧。很詳細!
1 tf.layers.conv2d( 2 inputs, 3 filters, 4 kernel_size, 5 strides=(1, 1), 6 padding='valid', 7 data_format='channels_last', 8 dilation_rate=(1, 1), 9 activation=None, 10 use_bias=True, 11 kernel_initializer=None, 12 bias_initializer=tf.zeros_initializer(), 13 kernel_regularizer=None, 14 bias_regularizer=None, 15 activity_regularizer=None, 16 kernel_constraint=None, 17 bias_constraint=None, 18 trainable=True, 19 name=None, 20 reuse=None 21 )
根據官方API文檔說明,tf.layer.con2d的input和padding與tf.nn.conv2d一樣。
但也有其它差別:
在這里filter為一個整數,該整數的數量為卷積數量 >>>整數,表示輸出空間的維數(即卷積過濾器的數量)。
kernel_size,可以是一個整數,或list或tuple類型的兩個整數。
strides:一個整數,或者包含了兩個整數的元組/隊列,表示卷積的縱向和橫向的步長。如果是一個整數,則橫縱步長相等。另外, strides不等於1 和 dilation_rate 不等於1 這兩種情況不能同時存在。