Kau*_*l28 6 python deep-learning keras tensorflow resnet
我正在从 Andrew Ng coursera 讲座中学习残差网络 (ResNet50)。我明白 ResNets 工作的主要原因之一是它们可以学习身份函数,这就是为什么在网络中添加越来越多的层不会损害网络的性能。
现在如讲座中所述,ResNets 中使用了两种类型的块:1)身份块和卷积块。
当输入和输出维度没有变化时使用标识块。卷积块几乎与身份块相同,但short-cut路径中有一个卷积层只是改变维度,使输入和输出的维度匹配。
这是身份块:
这是卷积块:
现在在卷积块(第二幅图像)的实现中,第一个块(即conv2d --> BatchNorm --> ReLu使用1x1卷积和步幅> 1 实现。
# First component of main path
X = Conv2D(F1, (1, 1), strides = (s,s), name = conv_name_base + '2a', padding = 'valid', kernel_initializer = glorot_uniform(seed=0))(X)
X = BatchNormalization(axis = 3, name = bn_name_base + '2a')(X)
X = Activation('relu')(X)
Run Code Online (Sandbox Code Playgroud)
我不明白在窗口大小为 1 时保持 stride > 1 的原因。这不只是数据丢失吗?在这种情况下,我们只是考虑替代像素。
这种超参数选择的可能原因是什么?任何直观的解释都会有所帮助!谢谢。
我不明白保持步长 > 1 和窗口大小 1 的原因。这不是只是数据丢失吗?
请参阅 resnet 论文中有关更深层次瓶颈架构的部分。另外,图 5。https: //arxiv.org/pdf/1512.03385.pdf
1 x 1 卷积通常用于沿滤波器维度增加或减少维度。因此,在瓶颈架构中,第一个 1 x 1 层减少了维度,以便 3 x 3 层需要处理更小的输入/输出维度。然后最后的 1 x 1 层再次增加滤波器尺寸。
这样做是为了节省计算/训练时间。
从纸上看,
“由于担心我们能够承受的培训时间,我们将构建块修改为瓶颈设计”。
我相信您可能已经回答了您自己的问题。每当您需要更改维度以使输出和输入维度匹配时,就会使用卷积块。话虽如此,如何使用卷积改变特定体积的尺寸?好吧,你改变步幅。
对于任何给定的卷积运算,假设输入是平方,输出体积的维度可以通过公式 (n+2p-f)/s +1 获得,其中 n 是输入维度,p 是你的零填充,f过滤器维度,s 是步幅。通过增加步幅,您可以有效地减少快捷方式输出体积的尺寸,因此,可以以确保快捷方式和较低路径的尺寸匹配的方式使用它,以便最终总和被执行。
那为什么它>1呢?好吧,如果您不需要大于 1 的步幅,那么您一开始就不需要尺寸更改,因此将使用恒等块。