卷積函數是卷積神經網絡(CNN)非常核心和重要的函數,在搭建CNN時經常會用到,是以較為詳細和深入的了解卷積函數具有十分重要的意義。
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None):在給定4維的輸入和過濾器的張量時,計算一個2維卷積。
參數詳解:
input:輸入的參數或者說是圖像tenors,input=[batch,in_height,in_width,in_channels],batch為圖像數量,in_height和in_width分别為圖像的長和寬,in_channels為圖像的顔色通道(彩色為3,黑白為1)。一般我們在定義圖像資訊時,x都是1維的,比如x= tf.placeholder(tf.float32,[None,784]),None表示不限制輸入數量,784表示一個784維的向量;在x傳入conv2d之前需要對x進行變形,即将x變為input的形式,比如說x_image=tf.reshape(x,[-1,28,28,1]),其中-1代表樣本數不确定,經過變形後x_image就可以被conv2d函數使用了。
filter:卷積核(濾波器),filter應該輸入的是卷積的參數,filter=[filter_height, filter_width, in_channels, out_channels],其中filter_height和filter_width表示卷積核的尺寸,這裡的in_channels與input中in_channels的含義一緻,是以它們倆也相等,out_channels代表卷積核的數量,也就是該卷積層會提取多少類特征(一個卷積核提取一類特征),out_channels也會作為下一層卷積層中卷積核的in_channels。
strides:代表卷積核移動的步長,是一個四維的數,[1,1,1,1],中間的兩個參數表示水準和垂直的移動步長,第1和4的參數與batch和通道數有關(這一點不确定,希望有大佬指點一下)。
padding:代表邊界處理的方式,string類型,隻能是"SAME","VALID"其中之一,具體差別如下: