【第5篇】ResNet,Python系统工程师面试题

3.4 实现


我们对 ImageNet 的实现遵循了 [21, 41] 中的做法。 图像被调整大小,其较短的边在 [256;480] 中随机采样以进行缩放 [41]。 224 × 224 224×224 224×224 的裁剪是从图像或其水平翻转中随机采样的,减去每个像素的平均值 [21]。使用了 [21] 中的标准颜色增强。我们在每次卷积之后和激活之前采用批量归一化(BN)[16],遵循 [16]。我们按照 [13] 中的方法初始化权重,并从头开始训练所有普通/残差网络。我们使用小批量大小为 256 的 SGD。学习率从 0.1 开始,并在误差平稳时除以 10,并且模型最多训练 60 × 104 次迭代。我们使用 0.0001 的权重衰减和 0.9 的动量。我们不使用 dropout [14],遵循 [16] 中的做法。在测试中,对于比较研究,我们采用标准的 10 作物测试 [21]。为了获得最佳结果,我们采用 [41,13] 中的完全卷积形式,并在多个尺度上平均分数(调整图像大小,使短边位于 {224;256;384;480;640})。

4 实验

===============================================================

4.1 ImageNet 分类


我们在包含 1000 个类别的 ImageNet 2012 分类数据集 [36] 上评估我们的方法。 模型在 128 万张训练图像上进行训练,并在 5 万张验证图像上进行评估。 我们还获得了测试服务器报告的 100k 测试图像的最终结果。 我们评估 top-1 和 top-5 错误率。

普通网络。 我们首先评估 18 层和 34 层的普通网络。 34层素网如图3(中)。 18层素网也是类似的形式。 有关详细架构,请参见表 1。

image-20210908092625781

表 2 中的结果表明,较深的 34 层素网比较浅的 18 层素网具有更高的验证误差。 为了揭示原因,在图 4(左)中,我们比较了他们在训练过程中的训练/验证错误。 我们观察到了退化问题——34 层普通网络在整个训练过程中具有更高的训练误差,即使 18 层普通网络的解空间是 34 层网络的子空间。

image-20210908092657076

image-20210908092717427

我们认为这种优化困难不太可能是由梯度消失引起的。 这些普通网络使用 BN [16] 进行训练,确保前向传播的信号具有非零方差。 我们还验证了反向传播的梯度表现出 BN 的健康规范。 因此,前向或后向信号都不会消失。 事实上,34层的普通网仍然能够达到有竞争力的精度(表3),这表明求解器在一定程度上是有效的。 我们推测深平原网络的收敛速度可能呈指数级低,这会影响训练误差的减少。 未来将研究这种优化困难的原因。

残差网络。 接下来我们评估 18 层和 34 层残差网络(ResNets)。 基线架构与上述普通网络相同,期望在每对 3×3 过滤器中添加一个快捷连接,如图 3(右)所示。 在第一个比较中(表 2 和图 4 右),我们对所有快捷方式使用恒等映射,对增加维度使用零填充(选项 A)。 因此,与普通对应物相比,它们没有额外的参数。

我们从表 2 和图 4 中得到了三个主要观察结果。 首先,通过残差学习逆转了情况——34 层 ResNet 比 18 层 ResNet 好(2.8%)。 更重要的是,34 层 ResNet 表现出相当低的训练误差,并且可以推广到验证数据。 这表明退化问题在此设置中得到了很好的解决,我们设法从增加的深度中获得了精度增益。

其次,与普通对应物相比,34 层 ResNet 将 top-1 错误减少了 3.5%(表 2),这是由于成功减少了训练错误(图 4 右与左)。 这种比较验证了残差学习在极深系统上的有效性。

最后,我们还注意到 18 层普通/残差网络相当准确(表 2),但 18 层 ResNet 收敛速度更快(图 4 右与左)。 当网络“不太深”(这里是 18 层)时,当前的 SGD 求解器仍然能够找到对普通网络的良好解决方案。 在这种情况下,ResNet 通过在早期提供更快的收敛来简化优化。

恒等与投影快捷方式。 我们已经证明无参数的身份快捷方式有助于训练。 接下来我们研究投影快捷方式(Eqn.(2))。 在表 3 中,我们比较了三个选项: (A) 零填充快捷方式用于增加维度,并且所有快捷方式都是无参数的(与表 2 和图 4 右图相同); (B) 投影快捷方式用于增加维度,其他快捷方式为恒等式; © 所有捷径都是投影

image-20210908094351371

表 3 显示所有三个选项都比普通选项好得多。 B 略好于 A。我们认为这是因为 A 中的零填充维度确实没有残差学习。 C 略好于 B,我们将此归因于许多(十三个)投影快捷方式引入的额外参数。 但是 A/B/C 之间的微小差异表明投影捷径对于解决退化问题并不是必不可少的。 所以我们在本文的其余部分不使用选项 C,以减少内存/时间复杂度和模型大小。 恒等的快捷方式对于不增加下面介绍的瓶颈架构的复杂性特别重要。

更深层次的瓶颈架构。 接下来,我们将描述我们用于 ImageNet 的更深层次的网络。 由于担心我们可以负担得起的训练时间,我们将构建块修改为瓶颈设计4。 对于每个残差函数 F,我们使用 3 层的堆栈而不是 2 层(图 5)。 这三层分别是 1×1、3×3 和 1×1 卷积,其中 1×1 层负责减少然后增加(恢复)维度,使 3×3 层成为输入/输出维度较小的瓶颈 . 图 5 显示了一个示例,其中两种设计具有相似的时间复杂度。

image-20210908094928364

无参数身份快捷方式对于瓶颈架构尤为重要。 如果将图 5(右)中的恒等快捷方式替换为投影,可以看出时间复杂度和模型大小都增加了一倍,因为快捷方式连接到两个高维端。 因此,恒等的快捷方式为瓶颈设计带来了更有效的模型。

50 层 ResNet:我们用这个 3 层瓶颈块替换 34 层网络中的每个 2 层块,从而产生 50 层 ResNet(表 1)。 我们使用选项 B 来增加维度。 这个模型有 38 亿次 FLOP。

101 层和 152 层 ResNet:我们通过使用更多的 3 层块构建 101 层和 152 层 ResNet(表 1)。 值得注意的是,尽管深度显着增加,但 152 层 ResNet(113 亿 FLOP)的复杂度仍然低于 VGG-16/19 网络(15.3/196 亿 FLOP)。

50/101/152 层的 ResNet 比 34 层的 ResNet 准确度高很多(表 3 和 4)。 我们没有观察到退化问题,因此可以从显着增加的深度中获得显着的精度提升。 所有评估指标都见证了深度的好处(表 3 和 4)。

image-20210908095223012

与最先进方法的比较。 在表 4 中,我们与之前最好的单模型结果进行了比较。 我们的基线 34 层 ResNets 已经达到了非常有竞争力的准确性。 我们的 152 层 ResNet 具有 4.49% 的单模型 top-5 验证错误。 这个单一模型的结果优于之前所有的集成结果(表 5)。 我们将六个不同深度的模型组合成一个整体(提交时只有两个 152 层的模型)。 这导致测试集上 3.57% 的 top-5 错误(表 5)。 此条目在 ILSVRC 2015 中获得第一名 。

在这里插入图片描述

4.2 CIFAR-10 和分析


我们对 CIFAR-10 数据集 [20] 进行了更多研究,该数据集由 10 个类别的 50k 训练图像和 10k 测试图像组成。 我们展示了在训练集上训练并在测试集上进行评估的实验。 我们的重点是极深网络的行为,而不是推动最先进的结果,因此我们有意使用如下简单的架构。

普通/残差架构遵循图 3(中/右)中的形式。 网络输入是 32×32 的图像,减去每个像素的平均值。 第一层是 3×3 卷积。 然后我们在大小为 f32 的特征图上使用 3×3 卷积的 6n 层堆栈; 16; 分别为 8g,每个特征图大小有 2n 层。 过滤器数量为f16; 32; 分别为64g。 子采样由步长为 2 的卷积执行。 网络以全局平均池化结束,一个 10 路全连接 层和 softmax。 总共有 6n+2 个堆叠的加权层。 下表总结了架构:

image-20210908130032559

当使用快捷连接时,它们连接到成对的 3×3 层(总共 3n 个快捷方式)。 在这个数据集上,我们在所有情况下都使用身份快捷方式(即选项 A),因此我们的残差模型与普通模型具有完全相同的深度、宽度和参数数量。

我们使用 0.0001 的权重衰减和 0.9 的动量,并采用 [13] 和 BN [16] 中的权重初始化,但没有 dropout。 这些模型在两个 GPU 上以 128 的 minibatch 大小进行训练。 我们从 0.1 的学习率开始,在 32k 和 48k 次迭代时将其除以 10,并在 64k 次迭代时终止训练,这是在 45k/5k train/val 拆分上确定的。 我们按照 [24] 中的简单数据增强进行训练:每边填充 4 个像素,从填充的图像或其水平翻转中随机采样一个 32×32 的裁剪。 为了测试,我们只评估原始 32×32 图像的单一视图。

我们比较 n = {3,5, 7, 9},得到20、32、44和56层网络。 图 6(左)显示了普通网的行为。 深度普通网络的深度增加,并且在更深时表现出更高的训练误差。 这种现象类似于 ImageNet(图 4,左)和 MNIST(见 [42])上的现象,表明这种优化难度是一个基本问题

image-20210908132914411

图 6(中)显示了 ResNets 的行为。 同样类似于 ImageNet 的情况(图 4,右),我们的 ResNet 设法克服了优化困难,并在深度增加时展示了准确性的提高。

我们进一步探索了导致 110 层 ResNet 的 n = 18。 在这种情况下,我们发现 0.1 的初始学习率稍微太大而无法开始收敛 5。 所以我们用0.01来预热训练,直到训练误差低于80%(大约400次迭代),然后回到0.1继续训练。 其余的学习计划和之前一样。 这个 110 层的网络收敛性很好(图 6,中)。 它的参数比 FitNet [35] 和 Highway [42](表 6)等其他深而薄的网络少,但仍属于最先进的结果(6.43%,表 6)。

image-20210908133135591

层响应分析。 图 7 显示了层响应的标准偏差 (std)。 响应是每个 3×3 层的输出,在 BN 之后和其他非线性(ReLU/加法)之前。 对于 ResNets,该分析揭示了残差函数的响应强度。 图 7 显示 ResNet 的响应通常比它们的普通对应物小。 这些结果支持我们的基本动机(第 3.1 节),即残差函数通常比非残差函数更接近于零。 我们还注意到,更深的 ResNet 具有更小的响应幅度,如图 7 中 ResNet-20、56 和 110 之间的比较所证明的那样。当有更多层时,ResNet 的单个层倾向于较少地修改信号 。

image-20210908133308401

探索超过 1000 个层。 我们探索了一个超过 1000 层的深度模型。 我们将 n = 200 设置为 1202 层的网络,其训练如上所述。 我们的方法没有显示优化困难,这个 103 层网络能够实现训练误差 <0.1%(图 6,右)。 它的测试误差还是相当不错的(7.93%,表6)。

但是在如此激进的深度模型上仍然存在未解决的问题。 这个 1202 层网络的测试结果比我们的 110 层网络差,尽管两者都有相似的训练误差。 我们认为这是因为过度拟合。 对于这个小数据集,1202 层网络可能会不必要地大 (19.4M)。 应用强正则化(例如 maxout [10] 或 dropout [14])以获得该数据集的最佳结果([10, 25, 24, 35])。 在本文中,我们没有使用 maxout/dropout,只是简单地通过设计的深和薄架构强加正则化,而不会分散对优化困难的关注。 但是结合更强的正则化可能会改善结果,我们将在未来研究。

4.3 PASCAL 和 MS COCO 上的物体检测


我们的方法在其他识别任务上具有良好的泛化性能。 表 7 和表 8 显示了 PASCAL VOC 2007 和 2012 [5] 和 COCO [26] 上的对象检测基线结果。 我们采用 Faster R-CNN [32] 作为检测方法。 在这里,我们对用 ResNet-101 替换 VGG-16 [41] 的改进感兴趣。 使用两种模型的检测实现(见附录)是相同的,所以收益只能归因于更好的网络。 最值得注意的是,在具有挑战性的 COCO 数据集上,我们获得了 COCO 标准指标 (mAP@[.5,.95]) 6.0% 的提升,相对提升了 28%。 这种增益完全是由于学习到的表示。image-20210908133834846
基于深度残差网络,我们在 ILSVRC & COCO 2015 竞赛的多个赛道中获得第一名:ImageNet 检测、ImageNet 定位、COCO 检测和 COCO 分割。 详细信息在附录中。

做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。

别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。

我先来介绍一下这些东西怎么用,文末抱走。


(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

(4)200多本电子书

这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。

基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。

(5)Python知识点汇总

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。

在这里插入图片描述

(6)其他资料

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。

在这里插入图片描述

这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
img

习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
[外链图片转存中…(img-p57TRkbg-1711075207672)]

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值