33

我正在查看来自CS231n Convolutional Neural Networks for Visual Recognition的 Convolutional Neural Network 。在卷积神经网络中,神经元以 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吗? 在此处输入图像描述

4

7 回答 7

13

在深度神经网络中,深度是指网络的深度,但在这种情况下,深度用于视觉识别,它转换为图像的第三维。

在这种情况下,您有一个图像,此输入的大小为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 像素。

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

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

这有道理吗?

于 2015-08-30T07:34:24.733 回答
8

CONV 层的深度是它使用的过滤器的数量。过滤器的深度等于它用作输入的图像深度。

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

于 2017-06-19T04:57:14.680 回答
6

我不知道为什么这被忽略了这么多。一开始我也很难理解它,除了 Andrej Karpathy(感谢 d00d)之外,很少有人解释它。尽管在他的文章 ( http://cs231n.github.io/convolutional-networks/ ) 中,他使用与动画中不同的示例来计算输出体积的深度。

首先阅读标题为“ Numpy 示例”的部分

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

在这种情况下,我们有一个 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在安德烈的例子中。

旁白:很多人想知道为什么 3 是标准输入深度。对于彩色输入图像,对于普通 ole 图像,这将始终为 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 在他的示例中那样索引,至少我没有玩弄它。此外,还有一些假设是和积运算是明确的。这是了解如何创建输出层、每个值代表什么以及深度是什么的关键。

希望这会有所帮助!

于 2017-01-05T02:27:21.900 回答
5

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

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

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

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

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

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

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

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

于 2017-07-26T10:25:24.607 回答
2

您需要注意的第一件事是

receptive field of a neuron is 3D 

即,如果感受野是 5x5,则神经元将连接到 5x5x(输入深度)个点。所以无论你的输入深度是多少,一层神经元只会产生一层输出。

每个神经元都连接到感受野的整个深度

现在,接下来要注意的是

depth of output layer = depth of conv. layer

即输出量与输入量无关,只取决于过滤器的数量(深度)。从前面的观点来看,这应该很明显。

请注意,过滤器的数量(cnn 层的深度)是一个超参数。您可以随心所欲地使用它,与图像深度无关。每个过滤器都有自己的一组权重,使其能够在过滤器覆盖的同一局部区域上学习不同的特征。

于 2017-11-22T01:10:36.207 回答
2

简单来说,它可以解释如下,

假设您有10 个过滤器每个过滤器的大小为 5x5x3。这是什么意思?该层的深度10,等于过滤器的数量。每个过滤器的大小可以定义为我们想要的,例如,5x5x3 在这种情况下,3 是前一层的深度。准确地说,下一层中每个过滤器的深度应该是 10(nxnx10),其中 n 可以定义为您想要的 5 或其他值。希望一切都会清楚。

于 2018-04-22T19:57:13.910 回答
1

网络的深度是网络中的层数。在Krizhevsky论文中,深度为 9 层(模数是如何计算层数的栅栏问题?)。 Krizhevsky et al CNN 的架构

于 2016-06-14T04:09:25.427 回答