1. 程式人生 > >對於tensorlayer裡面的卷積層裡面卷積核的理解

對於tensorlayer裡面的卷積層裡面卷積核的理解

在使用tensoflow進行搭建網路的時候,如果你用了tensorflow1.2以上的版本,就可以直接利用tensorlayer進行搭建網路裡面的層而不用像以前一樣自己定義層函式

tensorlayer裡面有一個函式Conv2d是用來搭建卷積層的,其實Conv2d是tensorlayer裡面的onv2dLayer的一個介面函式,函式原型如下:

Conv2d(net, n_filter=32, filter_size=(3, 3), strides=(1, 1), act = None,
        padding='SAME', W_init = tf.truncated_normal_initializer(stddev=0.02), b_init = tf.constant_initializer(value=0.0),
        W_init_args = {}, b_init_args = {}, use_cudnn_on_gpu = None, data_format = None,name ='conv2d',):

其中net值得就是該層的輸入(該層的上一層),其他的引數含義可以查閱官方文件

今天主要分析的就是裡面的filter,n_filter官方說法是該層的濾波器(卷積核)的個數,n_filter是幾的話該層就會輸出多少個feature map,但是這對於不想細做研究的同學來說,難免會產生一種錯誤的認識:比如這一層的輸入是10個feature map,輸出是5個feature map,我們反著推 輸出5個feature map對應的就是5個filter,用5個filter對輸入的10個feature map進行卷積濾波,這時候就可能有人認為使用同一個3×3(filter_size)的卷積核對10個feature map進行卷積相加得到一個feature map,然後用5個不同的filter這種操作5次就會的到5個feature map,其實你稍微深入去看一下這個函式就可以知道,這種理解是不對的 ,其實這裡的filter還有一個維度,我們暫且認為它是filter的深度吧,filter的深度和輸入的feature map數量是相同的(對於Input層就是和影象的channel數相同)

filter的熟讀也就是函式Conv2dLayer裡面的shape的第三個維度,所以是在卷積過程中一個filter_size[0]×filter_size[1]×pre_channel的filter對輸入的feature map進行卷積,並且每一個channel的filter_size[0]×filter_size[1]大小的filter是不同的;

其實還有另外一種理解方式,對於輸入m個feature map輸出為n個feature map的層來說,所需要的二維大小為filter_size的濾波器個數為m×n個,但是我們一般都是認為某一層有多少個filter就會輸出多少個feature map,從這個角度來說  我覺得還是把輸入的feature map數目理解為filter的第三個維度更好理解一些