1. 程式人生 > >tf.nn.conv2d函式和tf.nn.max_pool函式介紹

tf.nn.conv2d函式和tf.nn.max_pool函式介紹

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)

介紹引數:

input:指卷積需要輸入的引數,具有這樣的shape[batch, in_height, in_width, in_channels],分別是[batch張圖片, 每張圖片高度為in_height, 每張圖片寬度為in_width, 影象通道為in_channels]。

filter:指用來做卷積的濾波器,當然濾波器也需要有相應引數,濾波器的shape為[filter_height, filter_width, in_channels, out_channels],分別對應[濾波器高度, 濾波器寬度, 接受影象的通道數, 卷積後通道數],其中第三個引數 in_channels需要與input中的第四個引數 in_channels一致,out_channels第一看的話有些不好理解,如rgb輸入三通道圖,我們的濾波器的out_channels設為1的話,就是三通道對應值相加,最後輸出一個卷積核。

strides:代表步長,其值可以直接預設一個數,也可以是一個四維數如[1,2,1,1],則其意思是水平方向卷積步長為第二個引數2,垂直方向步長為1.其中第一和第四個引數我還不是很明白,請大佬指點,貌似和通道有關係。

padding:代表填充方式,引數只有兩種,SAME和VALID,SAME比VALID的填充方式多了一列,比如一個3*3影象用2*2的濾波器進行卷積,當步長設為2的時候,會缺少一列,則進行第二次卷積的時候,VALID發現餘下的視窗不足2*2會直接把第三列去掉,SAME則會填充一列,填充值為0。

use_cudnn_on_gpu:bool型別,是否使用cudnn加速,預設為true。大概意思是是否使用gpu加速,還沒搞太懂。

name:給返回的tensor命名。給輸出feature map起名字。

tf.nn.max_pool(value, ksize, strides, padding, name=None)

value:池化的輸入,一般池化層接在卷積層的後面,所以輸出通常為feature map。feature map依舊是[batch, in_height, in_width, in_channels]這樣的引數。

ksize:池化視窗的大小,引數為四維向量,通常取[1, height, width, 1],因為我們不想在batch和channels上做池化,所以這兩個維度設為了1。ps:估計面tf.nn.conv2d中stries的四個取值也有              相同的意思。

stries:步長,同樣是一個四維向量。

padding:填充方式同樣只有兩種不重複了。