理解卷积网络层

我一直在阅读有关 Conv 网络的文章,并且自己编写了一些模型。当我看到其他模型的可视化图表时,它显示每一层都比最后一层更小更深。层有 3 个维度,如 256x256x32。这第三个数字是什么?我假设前两个数字是节点数,但我不知道深度是多少。

回答

TL;DR:256x256x32指的是层的输出形状而不是层本身。


有很多文章和帖子解释了卷积层的工作原理。我会尽量回答你的问题而不涉及很多细节,只关注形状

假设您正在使用 2D 卷积层,您的输入和输出都将是 3D 的。也就是说,在不考虑其将对应于第四轴...因此,卷积层输入的形状将是批次(c, h, w)(或(h, w, c)取决于框架),其中c是信道数,h是输入和的宽度w的宽度。您可以将其视为c-channel h xw图像。这样的输入的最直观的例子是您的卷积神经网络的第一层卷积的输入:最有可能的大小的图像hXwc通道例如c=1对于灰度或c=3用于RGB ...

重要的是,对于该输入的所有像素,每个通道上的值提供了有关该像素的附加信息。拥有三个通道将为每个像素(在 2D 输入空间中的位置提供“像素”)提供比单个通道更丰富的内容。由于每个像素将使用三个值(三个通道)单个值(一个通道)进行编码。这种关于通道代表什么的直觉可以外推到更多的通道。正如我们所说,输入可以有c通道。

现在回到卷积层,这是一个很好的可视化。想象一下有一个5x5 1 通道输入。和一个由单个3x3过滤器组成的卷积层(即kernel_size=3

输入 筛选 卷积 输出
形状 (1, 5, 5) (3, 3) (3,3)
表示

现在请记住,输出的维度将取决于卷积层的步幅填充。这里输出的形状与过滤器的形状相同,不一定必须是!取输入形状(1, 5, 5),使用相同的卷积设置,您最终会得到形状(4, 4)(与过滤器形状不同(3, 3)

另外,需要注意的是,如果输入有多个通道: shape (c, h, w),则过滤器必须具有相同数量的通道。输入的每个通道将与滤波器的每个通道进行卷积,结果将平均为单个 2D 特征图。所以,你将有一个中间输出(c, 3, 3),其平均在通道上后,会离开我们(1, 3, 3)=(3, 3)。因此,考虑使用单个 filter 的卷积,无论有多少输入通道,输出将始终只有一个通道。

从那里你可以做的是在同一层上组装多个过滤器。这意味着您将图层定义为具有k 3x3过滤器。所以一个层由k过滤器组成。对于输出的计算,想法很简单:一个过滤器给出一个(3, 3)特征图,所以k过滤器将给出k 个 (3, 3)特征图。然后将这些地图堆叠到通道维度中。最终,留给你的输出形状...... (k, 3, 3)

k_hk_w分别为内核高度和内核宽度。和h'w'一个输出特征图的高度和宽度:

输入 输出
形状 (c, h, w) (k, c, k_h, k_w) (k, h', w')
描述 c-channel hxw特征图 k 形状过滤器 (c, k_h, k_w) k-channel h'xw'特征图

回到你的问题:

层有 3 个维度,如 256x256x32。这第三个数字是什么?我假设前两个数字是节点数,但我不知道深度是多少。

卷积层有四个维度,但其中之一是由您的输入通道数决定的。您可以选择卷积核的大小和过滤器的数量。这个数目将确定 输出的信道的数目。

256x256看起来非常高,你很可能对应于特征图的输出形状。另一方面,32将是输出的通道数,这......正如我试图解释的那样是该层中的过滤器数量。通常来说,卷积网络的视觉图中表示的维度对应于中间输出形状,而不是层形状。这里以VGG为例:

VGG 的输入形状是(3, 224, 224),知道第一个卷积的结果具有形状,(64, 224, 224)您可以确定该层共有64 个过滤器。

事实证明,VGG 中的内核大小是3x3。所以,这里有一个问题要问你:知道每个过滤器有一个偏置参数,VGG 的第一个卷积层总共有多少个参数?


以上是理解卷积网络层的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>