如何插入 ResNet50 层类型

数据挖掘 深度学习 喀拉斯
2021-09-28 00:12:06

我正在尝试从头开始重新创建 ResNet50,但我不太明白如何解释层的矩阵。

在此处输入图像描述

例如:[[1x1,64] [3x3, 64] [1x1, 4]] x 3

我知道它应该是一个卷积层,但是每个数字代表什么?

3个回答

为了解释清楚,我将使用 34 层的示例:

在此处输入图像描述

  • 首先,您有一个具有 64 个过滤器和 7x7 内核大小的卷积层(表中的conv1),然后是一个最大池化层。请注意,在这两种情况下,步幅都指定为stride = 2

  • 接下来,在conv2_x中,您有提到的池化层和以下卷积层。在这里,这些层通常成对分组(更大架构中的三重奏),因为残差是如何连接的(箭头每两层跳跃)。第一个矩阵:

    [3x3,643x3,64]3

意味着您有 2 层 kernel_size = 3x3,num_filters = 64,这些层重复 x3。这些对应于 pool,/2 和过滤器 128 个之间的层,总共 6 层(一对乘以 3)。

  • 接下来,我们有conv3_x

    [3x3,1283x3,128]4

2 层 kernel_size = 3x3,num_filters = 128,这些也重复,但这次是 4 次。这些是图中以下 8 个绿色层。

这一直持续到 avg_pooling 和 softmax。

请注意,除非过滤器大小增加,否则步幅始终为 1。论文中对此进行了讨论

普通网络:我们的普通基线主要受到 VGG 网络哲学的启发。卷积层大多具有 3×3 的过滤器,并遵循两个简单的设计规则:(i)对于相同的输出特征图大小,层具有相同数量的过滤器;(ii) 如果特征图大小减半,则过滤器的数量加倍,以保持每层的时间复杂度。我们直接通过步长为 2 的卷积层执行下采样。

Residual Networks:基线架构与上述普通网络相同,期望在每对 3×3 过滤器中添加一个快捷连接。

这就是为什么每次过滤器数量增加一倍时,您会看到不同颜色的第一层指定num_filters/2

您的示例不是指卷积层,而是指创建残差块的卷积层堆栈。

根据原始论文中的表 1,这里是一个带有一些符号的示例残差块:

[N x N, C1M x M, C2] x L

  • N x NM x M指定该层中使用的内核的大小。在论文中,作者称它们为过滤器。
  • C1C2指的是该卷积层中的通道数。
  • L是该块对该残差层重复的次数。

祝你好运,希望这会有帮助!

我希望这个笔记本能帮助你更好地理解。实施在 Keras 中,因此可以快速掌握!