入门的介绍:https://blog.csdn.net/v_JULY_v/article/details/51812459
CNN背后的机制:
CNN怎样是把未知图案和标准X图案一个局部一个局部的对比。即,局部感知机制。
CNN的不同滤波器权重不同,不同的滤波器filter会得到不同的输出数据,比如颜色深浅、轮廓。相当于如果想提取图像的不同特征,则用不同的滤波器filter,提取想要的关于图像的特定信息:颜色深浅或轮廓。
CNN中的局部感知机制。参数(权重)共享机制。
要注意一个滤波器也不仅仅就是一个矩阵,一个滤波器可能是三维的矩阵。而且卷积之后是:三个矩阵最后乘完相加得到一个数。
参考:https://www.jianshu.com/p/fe428f0b32c1
卷积层的原理:
在两幅图中大致相同的位置找到一些粗糙的特征进行匹配,不同的Feature匹配图像中不同的特征。当给你一张新的图时,CNN并不能准确地知道这些features到底要匹配原图的哪些部分,所以它会在原图中每一个可能的位置进行尝试。这样在原始整幅图上每一个位置进行匹配计算,我们相当于把这个feature变成了一个过滤器。(这个滤波器的理解就根通原里面的一样,它对按着对应相乘再相加的形式,滤掉一些不想要的,留下来能跟这个相互匹配的部分,这里就是要滑动着跟一副图片的不同部分进行过滤)
通过每一个feature的卷积操作,我们会得到一个新的二维数组。这也可以理解为对原始图像进行过滤的结果,我们称之为feature map,它是每一个feature从原始图像中提取出来的“特征”。(feature map是针对每一个feature新提取出来的特征,这个map表明了每一个值附近与feature之间的匹配情况)
池化层:
可以将一幅大的图像缩小,同时又只保留其中的重要信息。池化都是2*2大小,比如对于max-pooling来说,就是取输入图像中2*2大小的块中的最大值,作为结果的像素值,相当于将原始图像缩小了4倍。(在卷积层得到每一个值附近与feature所匹配的情况,池化层就是找出一定面积里面,哪个值与feature的匹配最好。)
因为最大池化(max-pooling)保留了每一个小块内的最大值,所以它相当于保留了这一块最佳的匹配结果(因为值越接近1表示匹配越好)。这也就意味着它不会具体关注窗口内到底是哪一个地方匹配了,而只关注是不是有某个地方匹配上了。
激活层:
relu函数:对于输入的负值,输出全为0,对于正值,原样输出(这大概是为了让卷积之后的结果更加明显,因为cnn要寻找的是哪个小区域附近匹配上了features,所以不用关注匹配值很小的情况。)
问题:就是经过卷积层之后的结果,已经不再是原来的图像,如果再经过一个卷积层之后这个结果还是匹配的feature map ?