CNN 中每个卷积层之后生成的特征图的数量
Number of feature maps produced after each convolution layer in CNN's
我的问题是关于每个卷积层之后的特征图的数量。根据我的研究,在每个卷积层中,基于我们想要的过滤器,我们得到准确数量的特征图。但是在一些教程中我遇到了一些不遵循这个的架构。例如在这个例子中:
池化后第一个卷积层的输出是6个特征图(红线)。在下一个卷积层中使用那个特征图,产生了 16 个新的特征图(绿线),但是如何呢?前面每一层的特征图应该创建 1,2,3... 新的特征图,我们不应该在下一层得到 16 个新的特征图。这是怎么发生的?我的假设不对?
第二次卷积的工作原理如下:
- 输入矩阵形状:6@14x14(6 个通道 - 在前一个(第一个)卷积步骤中应用 6 个滤波器的结果)
- 6@14x14 输入矩阵将使用 16 个滤波器进行卷积(每个 滤波器应具有 6 个通道,以便匹配输入矩阵中的通道数
- 这将产生 16@5x5 输出矩阵
注意:输入矩阵的通道数和每个过滤器中的通道数必须匹配才能执行按元素乘法。
所以第一次和第二次卷积之间的主要区别是第一次卷积输入矩阵中的通道数是1
所以我们将使用6
个过滤器,其中每个 过滤器有 只有一个 通道(矩阵深度)。
对于第二个卷积,输入矩阵有 6 个通道 (feature maps
),因此此卷积的 每个 过滤器也必须有 6 个通道。例如:每个 的 16 个过滤器将具有 6@3x3
形状。
单形状6@3x3
滤波器的卷积步骤的结果将是单通道WxH
(宽度,高度)形状。应用所有 16 个过滤器(其中每个过滤器的形状为:6@3x3
)后,我们将得到 16 个通道,其中每个通道都是 单个 过滤器卷积的结果。
让我用一个简单的例子给你一个关于卷积如何工作的基本概念:
如果我们有一个大小为 32x32 的 3 个通道的输入图像,并且如果我们选择使用 5x5 过滤器,则过滤器的尺寸将为 5x5x3(隐式)。
所以现在卷积将发生在输入图像和过滤器的相应通道之间,产生 3 个通道,这些通道将被添加以产生给定 5x5x3 过滤器的单个输出。
- 因此,每当我们说深度时,我们指的是我们希望添加的过滤器的数量。如果我们想要深度为 6,则意味着我们使用 6 个大小为 5x5x3 的过滤器,仅产生 6 层输出。
为了回答您的问题,在给定的体系结构中,他们对输入图像使用 6 个过滤器,然后使用 16 个大小为 (y x y x 6) 的过滤器,其中 y 应该是所选过滤器的高度和宽度。
我也有过一段时间的困惑,经过一番挖掘,迷雾才散去。
单通道卷积与多通道卷积的区别
这是我的理解出错的地方。我将尝试解释这种差异。我不是专家所以请多多包涵
单通道卷积运算
当我们想到一个简单的灰度 32X32 图像和一个卷积运算时,我们在第一层应用一个或多个卷积矩阵。
根据您的示例,这些尺寸为 5X5 的卷积矩阵中的每一个都会产生一个 28x28 矩阵作为输出。 为什么是 28X28? 因为,假设 stride=1 和 padding=0,你可以在 32-5+1=28 个位置滑动一个 window 5 像素的正方形。
在这种情况下,您的每个卷积矩阵都有 5X5=25 个可训练权重 + 1 个可训练偏差。您可以拥有任意数量的卷积核。但是,每个内核都是二维的,每个内核都会产生一个 28X28 维的输出矩阵,然后将其馈送到 MAXPOOL 层。
多通道卷积运算
如果图像是 RGB 32X32 图片怎么办?根据通俗文献,图像应被视为由 3 个通道组成,并且应对每个通道执行卷积运算。 我必须承认我仓促得出了一些误导性的结论。我的印象是我们应该使用三个独立的 5X5 卷积矩阵——每个通道 1 个。 我错了.
当你有 3 个通道 时,你的每个卷积矩阵的维度应该是 3X5X5 - 将其视为一个单元,包括5X5 矩阵堆叠 3 次。因此你有 5x5x3=75 个可训练权重 + 1 个可训练偏差.
第二个卷积层发生了什么?
在您的示例中,我发现将第一个 CONV1+MAXPOOL1 层生成的 6 个特征图可视化为 6 个通道更容易。因此,像以前一样应用相同的 RGB 逻辑,我们在第二个 CONV2 层中应用的任何卷积核都应该具有 6X5X5 的维度。 为什么是6个?因为我们CONV1+MAXPOOL1产生了6个特征图。 为什么是 5x5? 在您的示例中,您选择了 5x5 的窗口尺寸。理论上,我可以选择 3x3,在这种情况下内核维度将是 6X3X3。
因此,在当前示例中,如果您在 CONV2 层中有 N2 个卷积矩阵,那么这些 N2 个内核中的每一个都将是一个大小为 6X5X5 的矩阵。在当前示例中,N2=16 并且维度 6X5X5 的内核对具有 6 个通道 X 14X14 的输入图像进行卷积运算将产生 N2 个矩阵,每个矩阵的维度为 10X10。 为什么是 10? 10=14-5+1(步幅=1,填充=0)。
您现在为 MAXPOOL2 层排列了 N2=16 个矩阵。
参考:LeNet架构
http://deeplearning.net/tutorial/lenet.html
注意圈出的区域。您可以看到,在第二个卷积层中,操作显示为跨越第一层生成的 4 个特征图中的每一个。
参考:Andrew Ng 讲座
参考:多通道的卷积算法是怎样的?
我发现另一个 SFO 问题很好地描述了这一点。
请注意,在参考示例中,3 个通道中的信息被压缩为一个二维矩阵。这就是为什么来自 CONV1+MAXPOOL1 层的 6 个特征图 似乎不再对第一个全连接层的维度有所贡献。
我的问题是关于每个卷积层之后的特征图的数量。根据我的研究,在每个卷积层中,基于我们想要的过滤器,我们得到准确数量的特征图。但是在一些教程中我遇到了一些不遵循这个的架构。例如在这个例子中:
池化后第一个卷积层的输出是6个特征图(红线)。在下一个卷积层中使用那个特征图,产生了 16 个新的特征图(绿线),但是如何呢?前面每一层的特征图应该创建 1,2,3... 新的特征图,我们不应该在下一层得到 16 个新的特征图。这是怎么发生的?我的假设不对?
第二次卷积的工作原理如下:
- 输入矩阵形状:6@14x14(6 个通道 - 在前一个(第一个)卷积步骤中应用 6 个滤波器的结果)
- 6@14x14 输入矩阵将使用 16 个滤波器进行卷积(每个 滤波器应具有 6 个通道,以便匹配输入矩阵中的通道数
- 这将产生 16@5x5 输出矩阵
注意:输入矩阵的通道数和每个过滤器中的通道数必须匹配才能执行按元素乘法。
所以第一次和第二次卷积之间的主要区别是第一次卷积输入矩阵中的通道数是1
所以我们将使用6
个过滤器,其中每个 过滤器有 只有一个 通道(矩阵深度)。
对于第二个卷积,输入矩阵有 6 个通道 (feature maps
),因此此卷积的 每个 过滤器也必须有 6 个通道。例如:每个 的 16 个过滤器将具有 6@3x3
形状。
单形状6@3x3
滤波器的卷积步骤的结果将是单通道WxH
(宽度,高度)形状。应用所有 16 个过滤器(其中每个过滤器的形状为:6@3x3
)后,我们将得到 16 个通道,其中每个通道都是 单个 过滤器卷积的结果。
让我用一个简单的例子给你一个关于卷积如何工作的基本概念:
如果我们有一个大小为 32x32 的 3 个通道的输入图像,并且如果我们选择使用 5x5 过滤器,则过滤器的尺寸将为 5x5x3(隐式)。
所以现在卷积将发生在输入图像和过滤器的相应通道之间,产生 3 个通道,这些通道将被添加以产生给定 5x5x3 过滤器的单个输出。
- 因此,每当我们说深度时,我们指的是我们希望添加的过滤器的数量。如果我们想要深度为 6,则意味着我们使用 6 个大小为 5x5x3 的过滤器,仅产生 6 层输出。
为了回答您的问题,在给定的体系结构中,他们对输入图像使用 6 个过滤器,然后使用 16 个大小为 (y x y x 6) 的过滤器,其中 y 应该是所选过滤器的高度和宽度。
我也有过一段时间的困惑,经过一番挖掘,迷雾才散去。
单通道卷积与多通道卷积的区别 这是我的理解出错的地方。我将尝试解释这种差异。我不是专家所以请多多包涵
单通道卷积运算
当我们想到一个简单的灰度 32X32 图像和一个卷积运算时,我们在第一层应用一个或多个卷积矩阵。
根据您的示例,这些尺寸为 5X5 的卷积矩阵中的每一个都会产生一个 28x28 矩阵作为输出。 为什么是 28X28? 因为,假设 stride=1 和 padding=0,你可以在 32-5+1=28 个位置滑动一个 window 5 像素的正方形。
在这种情况下,您的每个卷积矩阵都有 5X5=25 个可训练权重 + 1 个可训练偏差。您可以拥有任意数量的卷积核。但是,每个内核都是二维的,每个内核都会产生一个 28X28 维的输出矩阵,然后将其馈送到 MAXPOOL 层。
多通道卷积运算
如果图像是 RGB 32X32 图片怎么办?根据通俗文献,图像应被视为由 3 个通道组成,并且应对每个通道执行卷积运算。 我必须承认我仓促得出了一些误导性的结论。我的印象是我们应该使用三个独立的 5X5 卷积矩阵——每个通道 1 个。 我错了.
当你有 3 个通道 时,你的每个卷积矩阵的维度应该是 3X5X5 - 将其视为一个单元,包括5X5 矩阵堆叠 3 次。因此你有 5x5x3=75 个可训练权重 + 1 个可训练偏差.
第二个卷积层发生了什么?
在您的示例中,我发现将第一个 CONV1+MAXPOOL1 层生成的 6 个特征图可视化为 6 个通道更容易。因此,像以前一样应用相同的 RGB 逻辑,我们在第二个 CONV2 层中应用的任何卷积核都应该具有 6X5X5 的维度。 为什么是6个?因为我们CONV1+MAXPOOL1产生了6个特征图。 为什么是 5x5? 在您的示例中,您选择了 5x5 的窗口尺寸。理论上,我可以选择 3x3,在这种情况下内核维度将是 6X3X3。
因此,在当前示例中,如果您在 CONV2 层中有 N2 个卷积矩阵,那么这些 N2 个内核中的每一个都将是一个大小为 6X5X5 的矩阵。在当前示例中,N2=16 并且维度 6X5X5 的内核对具有 6 个通道 X 14X14 的输入图像进行卷积运算将产生 N2 个矩阵,每个矩阵的维度为 10X10。 为什么是 10? 10=14-5+1(步幅=1,填充=0)。
您现在为 MAXPOOL2 层排列了 N2=16 个矩阵。
参考:LeNet架构
http://deeplearning.net/tutorial/lenet.html
参考:Andrew Ng 讲座
参考:多通道的卷积算法是怎样的?
我发现另一个 SFO 问题很好地描述了这一点。
请注意,在参考示例中,3 个通道中的信息被压缩为一个二维矩阵。这就是为什么来自 CONV1+MAXPOOL1 层的 6 个特征图 似乎不再对第一个全连接层的维度有所贡献。