在近些年,深度学习领域的卷积神经网络(CNNs或ConvNets)在各行各业为我们解决了大量的实际问题。但是对于大多数人来说,CNN仿佛戴上了神秘的面纱。 CNN是深度学习算法在图像处理领域的一个应用。主要被用来找寻图片中的模式。这个过程主要有两个步骤,首先要对图片做卷积,然后找寻模式。在神经网络中,前几层是用来寻找边界和角,随着层数的增加,我们就能识别更加复杂的特征。这个性质让CNN非常擅长识别图片中的物体。 学习CNN之前,我们需要对CNN和Deep Learning有一个简单的了解。 简要介绍下神经网络,神经网络的每个单元如下: 对应的公式: 该单元也可以被称作是Logistic回归模型。当将多个单元组合起来并具有分层结构时,就形成了神经网络模型。其对于的结构图如下: 其对应的公式如下: 神经网络的训练方法也同Logistic类似,不过由于其多层性,还需要利用链式求导法则对隐含层的节点进行求导,即梯度下降+链式求导法则,专业名称为反向传播。 正如你所见的那样,特征矩阵中的每一个项都和原图中的一个区域相关。 池化层池化层和卷积层很类似,也是用一个卷积核在图上移动。唯一的不同就是池化层中核和图片窗口的操作不再是线性的。最大池化和平均池化是最常见的池化函数。最大池化选取当前核覆盖的图片窗口中最大的数,而平均池化则是选择图片窗口的均值。 在CNN中,激活函数和其他网络一样,函数将数值压缩在一个范围内。下面列出了一些常见的函数。 CNN中主要有三种层,分别是:卷积层、池化层和激活层。 让我们来看一个实例,实现使用keras识别猫咪。 这张图长400像素宽320像素,有三个通道(rgb)的颜色。那么经过一层卷积运算之后会变成什么样子呢? 这是用一个3*3的卷积核和三个滤波器处理的效果。 我们可以看到,由于内核太大,我们失去了一些细节。还要注意,从数学角度来看,卷积核越大,图像的形状会变得越小。 ![]() 这张看起来好多了!现在我们可以看到我们的过滤器看到的一些事情。看起来红色替换掉了黑色的鼻子和黑色眼睛,蓝色替换掉了猫边界的浅灰色。我们可以开始看到图层如何捕获照片中的一些更重要的细节。 ![]() 如果我们增加内核大小,我们得到的细节就会越来越明显,当然图像也比其他两个都小。 增加一个激活层![]() 我们通过添加一个relu,去掉了很多不是蓝色的部分。 增加一个池化层我们添加一个池化层(摆脱激活层最大限度地让图片更加更容易显示)。 ![]() 正如预期的那样,猫咪变成了斑驳的,而我们可以让它更加斑驳。 ![]() 激活和最大池化 ![]() 如果我们将猫咪的图片放到LeNet模型中做卷积和池化,那么效果会怎么样呢? LeNet![]() CNN是非常强大的,虽然这些可视化并不完美,但我希望他们能够帮助像我这样正在尝试更好地理解ConvNets的人。 博客原文:https:///@erikreppel |
|