如何插入 ResNet50 层类型
为了解释清楚,我将使用 34 层的示例:
首先,您有一个具有 64 个过滤器和 7x7 内核大小的卷积层(表中的conv1),然后是一个最大池化层。请注意,在这两种情况下,步幅都指定为stride = 2。
接下来,在conv2_x中,您有提到的池化层和以下卷积层。在这里,这些层通常成对分组(更大架构中的三重奏),因为残差是如何连接的(箭头每两层跳跃)。第一个矩阵:
意味着您有 2 层 kernel_size = 3x3,num_filters = 64,这些层重复 x3。这些对应于 pool,/2 和过滤器 128 个之间的层,总共 6 层(一对乘以 3)。
接下来,我们有conv3_x:
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,这里是一个带有一些符号的示例残差块:
- 和指定该层中使用的内核的大小。在论文中,作者称它们为过滤器。
- 和指的是该卷积层中的通道数。
- 是该块对该残差层重复的次数。
祝你好运,希望这会有帮助!
我希望这个笔记本能帮助你更好地理解。实施在 Keras 中,因此可以快速掌握!































