对于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的第三个维度更好理解一些

猜你喜欢

转载自blog.csdn.net/Future_Engineer/article/details/78537241