概念
1)卷积核=过滤器filter:
每个卷积核有长宽深3个维度
2)feature map:
在cnn的每个卷积层,数据都是以三维形式存在的。你可以把它看成许多个二维图片叠在一起(像豆腐皮一样),其中每一个称为一个feature map。
3)feature map怎么生成
在输入层,如果是灰度图片,就只有一个feature map;如果是彩色图片,一般就是3个feature map(红绿蓝)。
4)卷积核运算过程
例如输入224x224x3(rgb三通道),输出是32位深度,卷积核尺寸为5x5。
strides=1时:
D是深度;F是filter的大小(宽度或者长度);表示filter的第d层第m行第n列权重;表示图像的第d层第i行第j列像素
那么我们需要32个卷积核,每一个的尺寸为5x5x3(最后的3就是原图的rgb位深3),每一个卷积核的每一层是5x5(共3层)分别与原图的每层224x224卷积,然后将得到的三张新图叠加(算术求和),变成一张新的feature map。 每一个卷积核都这样操作,就可以得到32张新的feature map了。 也就是说:
不管输入图像的深度为多少,经过一个卷积核(filter),最后都通过下面的公式变成一个深度为1的特征图。不同的filter可以卷积得到不同的特征,也就是得到不同的feature map。
tf.layers.conv2d
def conv2d(input, filter, strides, padding, use_cudnn_on_gpu=True, data_format="NHWC", dilations=[1, 1, 1, 1], name=None):
r"""Computes a 2-D convolution given 4-D `input` and `filter` tensors.
feature map的一些理解:
1)特征映射,是输入图像和卷积核卷积后生成的feature map,图像的特征;
2)feature map的意思在计算机视觉领域基本一致,可以草率的翻译成特征图,例如rgb,所有点的r组成一个feature map;
3)在输入层,如果是灰度图片,那就只有一个feature map;如果是彩色图片,一般就是3个feature map(红绿蓝);
卷积核的一些理解:
1)层与层之间会有若干个卷积核(kernel),上一层和每个feature map跟每个卷积核做卷积,都会产生下一层的一个feature map;
2)卷积核在有的文档里也称为过滤器(filter):
每个卷积核具有长宽深三个维度;
在某个卷积层中,可以有多个卷积核:下一层需要多少个feather map,本层就需要多少个卷积核。
卷积核的形状
每个卷积核具有长、宽、深三个维度。在CNN的一个卷积层中:
卷积核的长、宽都是人为指定的,长X宽也被称为卷积核的尺寸,常用的尺寸为3X3,5X5等;
卷积核的深度与当前图像的深度(feather map的张数)相同,所以指定卷积核时,只需指定其长和宽 两个参数。例如,在原始图像层 (输入层),如果图像是灰度图像,其feather map数量为1,则卷积核的深度也就是1;如果图像是grb图像,其feather map数量为3,则卷积核的深度也就是3.
因为随着网络的加深,feature map的长宽尺寸缩小,本卷积层的每个map提取的特征越具有代表性(精华部分),所以后一层卷积层需要增加feature map的数量,才能更充分的提取出前一层的特征,一般是成倍增加
https://blog.csdn.net/xys430381_1/article/details/82529397
filter的理解
filter有两种理解:
在有的文档中,一个filter等同于一个卷积核:只是指定了卷积核的长宽深;
而有的情况(例如tensorflow等框架中,filter参数通常指定了卷积核的长、宽、深、个数四个参数),filter包含了卷积核形状和卷积核数量的概念:即filter既指定了卷积核的长宽深,也指定了卷积核的数量。
一般 channels 的含义是,每个卷积层中卷积核的数量
https://blog.csdn.net/xiaocong1990/article/details/82532814
TextCNN对文本浅层特征的抽取能力很强,在短文本领域如搜索、对话领域专注于意图分类时效果很好,应用广泛,且速度快,一般是首选;对长文本领域,TextCNN主要靠filter窗口抽取特征,在长距离建模方面能力受限,且对语序不敏感。
http://www.cnblogs.com/qggg/p/6832342.html
```
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
除去name参数用以指定该操作的name,与方法有关的一共五个参数:
第一个参数input:指需要做卷积的输入图像,它要求是一个Tensor,
具有[batch, in_height, in_width, in_channels]这样的shape,
具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数]
第二个参数filter:相当于CNN中的卷积核,它要求是一个Tensor,
具有[filter_height, filter_width, in_channels, out_channels]这样的shape,
具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数]
第三个参数strides:卷积时在图像每一维的步长,这是一个一维的向量,长度4
第四个参数padding:只能是"SAME","VALID"其中之一,这个值决定了不同的卷积方式
第五个参数:use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true
结果返回一个Tensor,这个输出,就是我们常说的feature map,
shape仍然是[batch, height, width, channels]这种形式。
```
完毕。