您的位置:首页 > 其它

笔记:CNN基础原理

2018-03-06 13:43 323 查看

什么是卷积

卷积是通过俩个函数生成第三个函数的一种数学算子。对于图像,通过filter与原图像矩阵的生成基于filter的图像特征矩阵。

对于64*64大小的图像,如果图像使用R,G,B三通道存储,那么我们的输入图像矩阵为(64, 64, 3),每个元素的值由0到255。如果这时我们使用卷积核filter大小为(3, 3)的二维矩阵来提取图像的某一个特征F,那么得到的就是基于该特征F的图像特征矩阵。所得到的矩阵为二维矩阵,大小取决于filter的大小,图像的padding处理,filter移动的步长(stride)。即我们获得的二维特征矩阵的大小为



这时我们得到关于一个特征F的特征矩阵,那么我可能需要提取多个特征,这就要用到多个不同的filter。例如

⎡⎣⎢⎢⎢111110101010−10−10−10−10−1−1−1−1⎤⎦⎥⎥⎥(filter1)(filter1)[110−10−1110−10−1110−10−1110−10−1]

filter1用于提取垂直特征,如果该图像在某个filter大小的区域内有垂直的明显差异,例如一条竖线,那么在该区域获得特征值就与其他无明显差异的值较大。

⎡⎣⎢⎢⎢11−1−11010−10−101010−10−1011−1−1⎤⎦⎥⎥⎥(filter2)(filter2)[110101110101−1−10−10−1−1−10−10−1]

filter2用于提取水平特征。

还有很多filter用来提取特征,然后我们将每个filter提取的二维特征矩阵合围一个3为特征矩阵,即(w_output, h_output, n_filter)然后将这个矩阵作为下一层的输入。

池化(pooling)

池化是对我们获取的特征矩阵进行进一步的优化,使得减少过拟合(over-fitting)现象,在有些网络中,将池化层与卷积层合为一层。

平均池化(average pooling)

顾名思义,平均池化即是通过filter获取我们获得特征的平均值,其输出大小与卷积层算法相同,一般我们使用same padding,通过添加padding的方式来使得pooling layer 的输出与 cnn layer 的输出维度相同。

average pooling 在之前非常常用,但目前常用的是max pooling

最大池化(max pooling)

最大池化即获取特征的最大值,但这会导致数据丢失,导致欠拟合现象。但确实目前池化层常用的方法。

全连接层(full-connected layer, FC)

全连接层用于将我们提取到的特征矩阵转化为一维矩阵,将特征进行映射,便于我们进一步提取特征值,最后我们可以通过sigmoid(二元分类),softmax(多元分类)作为输出层函数,获取我们需要的结果。

但由于FC会占据全部网络很大的占比,一些如ResNet使用了全局平均池化。

对于有错误的地方还请纠正,以上内容结合Adrew Ng的深度学习和相关blog的内容结合总结。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: