一、简介
CNN由对输入进行过滤(卷积)以获得有用信息的层组成。 这些卷积层具有可以学习的参数(内核),因此可以自动调整这些过滤器以提取针对手头任务的最有用信息,而无需选择特征。 CNN最好与图像一起使用。 普通神经网络不适用于图像分类问题。

二、普通神经网络的比较

在正常的神经网络上,我们需要将图像转换为单个1d向量,然后将数据发送到完全连接的隐藏层。 在这种情况下,每个神经元每个神经元都有参数。

 

神经网络显存占用 神经网络 cpu_卷积

正常情况下,[CONV-> ReLU-> Pool-> CONV-> ReLU-> Pool-> FC-> Softmax_loss(训练期间)]模式是很常见的。

神经网络显存占用 神经网络 cpu_神经网络_02

主角卷积层:

卷积神经网络上最重要的操作是卷积层,想象一下,如果我们用5x5x3对该图像进行卷积(滤波器深度必须与输入的深度相同),则得到一个32x32x3的图像(结果是激活图28x28x1)。

滤镜将在所有图像上寻找特定的事物,这意味着仅使用一个滤镜将在整个图像中寻找图案。

神经网络显存占用 神经网络 cpu_神经网络_03

现在考虑我们希望卷积层寻找6种不同的东西。 在这种情况下,我们的卷积层将具有6个5x5x3滤镜。 每个人都在寻找图像上的特定图案。
顺便说一下,卷积本身就是线性运算,如果我们不想遭受线性分类器的相同问题,我们需要在卷积层的末尾添加一个非线性层(通常是Relu)。使用卷积作为模式匹配的另一个重要点是我们要在图像上搜索的对象的位置不相关。 在神经网络的情况下,模型/假设将在训练过程中在对象所在的确切位置上学习对象。

卷积层Hyper参数
这些是用于配置卷积层的参数;
内核大小(K):较小为佳(但如果位于第一层,则需要大量内存);
步幅(S):内核窗口将滑动多少像素(在转换层中通常为1,在合并层中通常为2);
零填充(填充):在图像边界上放置零,以使转换输出大小与输入大小相同(F = 1,PAD = 0; F = 3,PAD = 1; F = 5,PAD = 2; F = 7,PAD = 3);
过滤器数量(F):转换层将查找的图案数量。

默认情况下,卷积输出的结果始终小于输入。 为了避免这种行为,我们需要使用填充。 要计算卷积输出(激活图)大小,我们需要以下公式:

神经网络显存占用 神经网络 cpu_神经网络显存占用_04

在这里,我们将看到卷积窗口在输入图像上滑动并更改其中一些超参数的示例:
卷积,无填充且步幅为1
在这里,我们有一个输入4x4与一个滤波器3x3(K = 3)卷积,其步幅(S = 1)和填充(pad = 0)。
填充和步长为1的卷积
现在我们有一个输入5x5与一个滤波器3x3(k = 3)卷积,其步幅(S = 1)和填充(pad = 1)。 在某些库中,有一个功能始终可以计算正确的填充量,以使输出空间尺寸与输入尺寸保持“相同”。

神经网络显存占用 神经网络 cpu_滤镜_05

内存量
在这里,我们展示了如何计算卷积层上所需的内存量。
输入:32x32x3、32x32 RGB图像
CONV:内核(F):5x5,步幅:1,Pad:2,numFilters:10,当我们使用填充时,我们的输出量将为32x32x10,因此以字节为单位的内存量为:10240字节
因此,内存量基本上只是4d张量的输出体积的乘积。

神经网络显存占用 神经网络 cpu_神经网络显存占用_06

三、总结
本篇文章我们初步的带大家了解了卷积的一些现实中的实际用例,同时对其进行了必要的分析,下面将继续对这部分的内容进行深入的介绍。