深入理解与实现ResNet及其在CIFAR - 10上的应用
1. ResNet基础与改进
在训练ResNet时,通常会使用带有“瓶颈”(bottleneck)技术的残差模块变体,而非原始版本,特别是对于层数超过50层的ResNet实现。“瓶颈”技术会先降低维度,再增加维度。在构建自己的残差模块时,常见的伪代码如 residual_module(K = 128) ,意味着最终的卷积层将学习128个滤波器,而前两个卷积层将学习128/4 = 32个滤波器。
2016年,He等人发表了关于残差模块的第二篇论文,对残差模块内卷积层、激活层和批量归一化层的顺序进行了理论和实证研究。原始的带瓶颈的残差模块结构为:接受输入(ReLU激活图),然后应用一系列的 (CONV => BN => RELU) * 2 => CONV => BN ,再将此输出与原始输入相加,最后应用一个最终的ReLU激活。而He等人的研究发现了一种更优的层顺序,即预激活(pre - activation)方法。
在预激活版本的残差模块中,移除了模块底部的ReLU,并重新排列批量归一化和激活层,使其位于卷积层之前。现在,不是以卷积开始,而是应用一系列的 (BN => RELU => CONV) * 3 (假设使用了瓶颈技术)。残差模块的输出是相加操作,随后输入到网络中的下一个残差模块。
2. 实现ResNet
接下来,我们将在Keras中实现ResNet,使用带有瓶颈和预激活的残差模块。首先,更新项目结构,在 pyimagesearch <
超级会员免费看
订阅专栏 解锁全文
944

被折叠的 条评论
为什么被折叠?



