什么是卷积神经网络的深度?

Shu*_*his 27 machine-learning neural-network deep-learning conv-neural-network

我正在研究CS231n卷积神经网络用于视觉识别的卷积神经网络.在卷积神经网络,神经元被设置在3个维度(height,width,depth).我遇到depth了CNN的问题.我无法想象它是什么.

在链接中他们说The CONV layer's parameters consist of a set of learnable filters. Every filter is small spatially (along width and height), but extends through the full depth of the input volume.

例如,对这张照片感兴趣.对不起,如果图像太糟糕了.蹩脚的画面

我可以理解我们从图像中取出一小块区域,然后将其与"过滤器"进行比较.那么滤镜会收集小图片吗?他们还说,We will connect each neuron to only a local region of the input volume. The spatial extent of this connectivity is a hyperparameter called the receptive field of the neuron.那么感受野与过滤器具有相同的尺寸吗?这里的深度又是什么?我们用CNN的深度表示什么?

所以,我的问题主要是,如果我拍摄的图像具有维度[32*32*3](假设我有50000个这样的图像,制作数据集[50000*32*32*3]),我应该选择什么作为其深度和深度意味着什么.过滤器的尺寸也是什么?

如果任何人都可以提供一些直观的链接,它将会非常有用.

编辑:所以在教程的一部分(真实世界的例子部分),它说 The Krizhevsky et al. architecture that won the ImageNet challenge in 2012 accepted images of size [227x227x3]. On the first Convolutional Layer, it used neurons with receptive field size F=11, stride S=4 and no zero padding P=0. Since (227 - 11)/4 + 1 = 55, and since the Conv layer had a depth of K=96, the Conv layer output volume had size [55x55x96].

在这里,我们看到深度是96.深度是我任意选择的东西吗?还是我计算的东西?同样在上面的例子中(Krizhevsky等人)他们有96个深度.那96个深度是什么意思呢?该教程也说明了Every filter is small spatially (along width and height), but extends through the full depth of the input volume.

这意味着深度将是这样的?如果是这样,我可以假设Depth = Number of Filters吗? 在此输入图像描述

Sem*_*glu 11

在深度神经网络中,深度指的是网络的深度,但在此上下文中,深度用于视觉识别,并且它转换为图像的第三维.

在这种情况下,您有一个图像,此输入的大小为32x32x3,即(width, height, depth).神经网络应该能够基于该参数学习,因为深度转换为训练图像的不同通道.

更新:

在CNN的每一层中,它都会学习有关训练图像的规律性.在最初的图层中,规则是曲线和边缘,然后当您沿着图层深入时,您开始学习更高级别的规则,例如颜色,形状,对象等.这是基本的想法,但有很多技术细节.在继续之前,请先试一试:http://www.datarobot.com/blog/a-primer-on-deep-learning/

更新2:

请查看您提供的链接中的第一个数字.它说'在这个例子中,红色输入层保持图像,因此它的宽度和高度将是图像的尺寸,深度将是3(红色,绿色,蓝色通道).这意味着ConvNet神经元通过将其神经元排列成三维,来转换输入图像.

作为您问题的答案,深度对应于图像的不同颜色通道.

而且,关于过滤器深度.教程说明了这一点.

每个过滤器在空间上都很小(沿宽度和高度),但延伸到输入体积的整个深度.

这基本上意味着滤镜是图像的较小部分,其围绕图像的深度移动以便了解图像中的规则性.

更新3:

对于现实世界的例子,我只是浏览了原始论文,它说:第一个卷积层过滤224×224×3输入图像,96个内核大小为11×11×3,步长为4个像素.

在教程中,它将深度称为通道,但在现实世界中,您可以设计您喜欢的任何尺寸.毕竟这是你的设计

本教程旨在让您了解ConvNets如何在理论上工作,但如果我设计一个ConvNet,没有人可以阻止我提出一个具有不同深度的ConvNet .

这有意义吗?


sam*_*ach 5

我不确定为什么这么重要.起初我也很难理解它,而且很少有人在Andrej Karpathy之外(感谢d00d)解释过它.虽然,在他的文章(http://cs231n.github.io/convolutional-networks/)中,他使用与动画中不同的示例来计算输出音量的深度.

首先阅读标题为' Numpy examples '的部分

在这里,我们迭代地进行.

在这种情况下,我们有一个11x11x4.(为什么我们从4开始是一种奇特的,因为它更容易掌握,深度为3)

真的要注意这一行:

位置(x,y)处的深度列(或光纤)将是激活X [x,y,:].

深度切片,或等效地在深度d处的激活图将是激活X [:,:,d].

V[0,0,0] = np.sum(X[:5,:5,:] * W0) + b0

V是您的输出量.第零个索引v [0]是您的列 - 在这种情况下,V[0] = 0这是输出卷中的第一列. V[1] = 0这是输出卷中的第一行.V[3]= 0是深度.这是第一个输出层.

现在,这里是人们感到困惑的地方(至少我做过).输入深度与输出深度完全无关.输入深度仅控制滤波器深度.W在Andrej的例子中.

旁白:很多人想知道为什么3是标准输入深度.对于彩色输入图像,对于普通图像,这将始终为3.

np.sum(X[:5,:5,:] * W0) + b0 (卷积1)

这里,我们在5x5x4的权重向量W0之间进行元素计算.5x5是任意选择.4是我们需要匹配输入深度的深度.权重向量是您的过滤器,内核,接收字段或人们决定在路上调用的任何混淆名称.

如果你是从非python背景来看这个,那可能是因为阵列切片符号不直观的原因.计算是图像的第一个卷积大小(5x5x4)与权重向量的点积.输出是单个标量值,它取第一个滤波器输​​出矩阵的位置.想象一个4 x 4矩阵,表示整个输入中每个卷积运算的总和.现在为每个过滤器堆叠它们.这将给你你的输出量.在Andrej的写作中,他开始沿x轴移动.y轴保持不变.

这是一个V[:,:,0]关于卷积的样子的例子.请记住,索引的第三个值是输出图层的深度

[result of convolution 1, result of convolution 2, ..., ...] [..., ..., ..., ..., ...] [..., ..., ..., ..., ...] [..., ..., ..., result of convolution n]

动画最适合理解这一点,但Andrej决定将它与一个与上述计算不匹配的示例交换.

这花了我一段时间.部分是因为numpy并没有像Andrej那样在他的例子中做出指数,至少我没有玩过它.此外,还有一些假设认为总和产品操作是明确的.这是理解输出层如何创建,每个值代表什么以及深度是什么的关键.

希望这有帮助!


Ada*_*rya 5

CONV层的深度是它正在使用的滤镜数量。滤镜的深度等于其用作输入的图像深度。

例如:假设您使用的图像为227 * 227 * 3。现在,假设您使用的尺寸为11 * 11(空间尺寸)的过滤器。这个11 * 11的正方形将沿着整个图像滑动,以产生一个二维数组作为响应。但是,为了这样做,它必须覆盖11 * 11区域内的每个方面。因此,滤波器的深度将是图像的深度=3。现在假设我们有96个这样的滤波器,每个滤波器产生不同的响应。这将是卷积层的深度。它只是所使用的过滤器数量。


Ste*_*L19 5

由于我们在做图像分类问题时的输入量是N x N x 3。一开始不难想象深度意味着什么——只是通道的数量—— Red, Green, Blue。好的,所以第一层的含义很清楚。但是接下来的呢?这是我尝试将这个想法形象化的方法。

  1. 在每一层上,我们应用一组围绕输入进行卷积的过滤器。让我们想象一下,目前我们在第一层,我们围绕一个Vsize的体积进行卷积N x N x 3。正如@Semih Yagcioglu 一开始提到的,我们正在寻找一些粗略的特征:曲线、边缘等......假设我们应用 N 个相同大小 (3x3) 的过滤器,步幅为 1。然后这些过滤器中的每一个都在寻找不同的围绕 进行卷积时的曲线或边缘V。当然,过滤器具有相同的深度,我们希望提供整个信息而不仅仅是灰度表示。

  2. 现在,如果M过滤器将寻找 M 条不同的曲线或边缘。并且这些过滤器中的每一个都会产生一个由标量组成的特征图(标量的含义是过滤器说:这里有这条曲线的概率是X%)。当我们围绕 Volume 使用相同的过滤器进行卷积时,我们会得到这张标量图,告诉我们我们看到曲线的确切位置。

  3. 然后是特征图堆叠。想象一下堆叠如下。我们有关于每个过滤器检测到特定曲线的位置的信息。很好,然后当我们堆叠它们时,我们会获得有关在输入体积的每个小部分可用的曲线/边缘的信息。这是我们第一个卷积层的输出。

  4. 考虑到 时,很容易理解非线性背后的想法3。当我们在某个特征图上应用 ReLU 函数时,我们说:移除该位置曲线或边的所有负概率。这当然是有道理的。

  5. 然后下一层的输入将是一个 Volume $V_1$ 携带关于不同空间位置的不同曲线和边缘的信息(记住:每层携带关于 1 条曲线或边缘的信息)。

  6. 这意味着下一层将能够通过组合这些曲线和边缘来提取有关更复杂形状的信息。再次将它们组合起来,过滤器应具有与输入体积相同的深度。
  7. 我们不时应用池化。意思就是缩小体积。因为当我们使用 strides = 1 时,我们通常会针对同一特征查看像素(神经元)太多次。

希望这是有道理的。查看著名的 CS231 课程提供的惊人图表,以检查特定位置的每个特征的概率是如何计算的。