先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
正文
复合功能。 受 [12] 的启发,我们将 H ℓ ( ⋅ ) H_{\ell} (·) Hℓ(⋅) 定义为三个连续操作的复合函数:批量归一化 (BN) [14],然后是整流线性单元 (ReLU) [6] 和 3 × 3 卷积( Conv)。
池化层。 当特征图的大小发生变化时,等式(2)中使用的连接操作是不可行的。 然而,卷积网络的一个重要部分是改变特征图大小的下采样层。 为了在我们的架构中进行下采样,我们将网络划分为多个密集连接的密集块; 参见图 2。我们将块之间的层称为过渡层,它们进行卷积和池化。 我们实验中使用的过渡层由一个批量归一化层和一个 1×1 卷积层和一个 2×2 平均池化层组成。
**增长率。**如果每个函数 H ℓ H_{\ell} Hℓ产生 k 个特征图,那么 ℓ t h \ell ^{th} ℓth 层有$ k_{0}+ k × (\ell − 1) $个输入特征图,其中 k0 是输入层中的通道数。 DenseNet 和现有网络架构之间的一个重要区别是 DenseNet 可以有非常窄的层,例如,k = 12。我们将超参数 k 称为网络的增长率。我们在第 4 节中表明,相对较小的增长率足以在我们测试的数据集上获得最先进的结果。对此的一种解释是,每一层都可以访问其块中的所有先前特征图,因此可以访问网络的“集体知识”。人们可以将特征图视为网络的全局状态。每层都将自己的 k 个特征图添加到这个状态。增长率调节每层对全局状态贡献多少新信息。全局状态一旦写入,就可以从网络内的任何地方访问,并且与传统网络架构不同,不需要在层与层之间复制它 。
Bottleneck layers。 虽然每一层只产生 k 个输出特征图,但它通常有更多的输入。 在 [37, 11] 中已经注意到,可以在每个 3×3 卷积之前引入 1×1 卷积作为Bottleneck layers,以减少输入特征图的数量,从而提高计算效率。 我们发现这种设计对 DenseNet 特别有效,我们将我们的网络称为具有这样一个瓶颈层的网络,即 H ℓ H_{\ell} Hℓ 的 BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3) 版本, 作为 DenseNet-B。 在我们的实验中,我们让每个 1×1 卷积产生 4k 个特征图。
压缩。 为了进一步提高模型的紧凑性,我们可以减少过渡层的特征图数量。 如果一个密集块包含 m 个特征图,我们让下面的过渡层生成 bθmc 输出特征图,其中 0 <θ ≤1 被称为压缩因子。 当 θ = 1 时,跨过渡层的特征图数量保持不变。 我们将 θ<1 的 DenseNet 称为 DenseNet-C,我们在实验中设置 θ = 0.5 θ = 0.5 θ=0.5。 当同时使用 θ < 1 的瓶颈层和过渡层时,我们将我们的模型称为 DenseNet-BC。
**实施细节。**在除 ImageNet 之外的所有数据集上,我们实验中使用的 DenseNet 具有三个密集块,每个块都有相同的层数。在进入第一个密集块之前,对输入图像执行具有 16 个(或 DenseNet-BC 增长率的两倍)输出通道的卷积。对于内核大小为 3×3 的卷积层,输入的每一侧都填充了一个像素以保持特征图大小固定。我们使用 1×1 卷积,然后是 2×2 平均池化作为两个连续密集块之间的过渡层。在最后一个密集块的末尾,执行全局平均池化,然后附加一个 softmax 分类器。三个密集块中的特征图大小分别为 32×32、16×16 和 8×8。我们使用配置 fL = 40 的基本 DenseNet 结构进行实验; k = 12g,fL = 100; k = 12g 和 fL = 100; k = 24g。对于 DenseNetBC,配置 fL = 100 的网络; k=12g,fL=250; k = 24g 且 fL = 190; k = 40g 被评估。
在我们对 ImageNet 的实验中,我们在 224×224 输入图像上使用具有 4 个密集块的 DenseNet-BC 结构。 初始卷积层包含 2k 个大小为 7×7、步幅为 2 的卷积; 所有其他层中的特征图数量也来自设置 k。 我们在 ImageNet 上使用的确切网络配置如表 1 所示。
===============================================================
我们凭经验证明了 DenseNet 在几个基准数据集上的有效性,并与最先进的架构进行了比较,特别是与 ResNet 及其变体。
CIFAR。 两个 CIFAR 数据集 [15] 由 32×32 像素的彩色自然图像组成。 CIFAR-10 (C10) 由来自 10 个类别的图像和来自 100 个类别的 CIFAR-100 (C100) 组成。 训练集和测试集分别包含 50,000 和 10,000 张图像,我们保留 5,000 张训练图像作为验证集。 我们采用广泛用于这两个数据集的标准数据增强方案(镜像/移位)[11、13、17、22、28、20、32、34]。 我们在数据集名称(例如,C10+)的末尾用“+”标记表示这个数据增强方案。 对于预处理,我们使用通道均值和标准差对数据进行归一化。 对于最终运行,我们使用所有 50,000 张训练图像并在训练结束时报告最终测试错误。
SVHN。 街景房屋号码 (SVHN) 数据集 [24] 包含 32×32 彩色数字图像。 训练集中有 73,257 张图像,测试集中有 26,032 张图像,还有 531,131 张用于额外训练的图像。 按照惯例 [7, 13, 20, 22, 30] 我们使用所有训练数据而不进行任何数据增强,并从训练集中分割出一个包含 6,000 张图像的验证集。 我们在训练期间选择验证错误最低的模型并报告测试错误。 我们遵循 [42] 并将像素值除以 255,使它们在 [0; 1] 范围
ImageNet。 ILSVRC 2012 分类数据集 [2] 包含 120 万张用于训练的图像和 50,000 张用于验证的图像,从 1 开始; 000班。 我们采用与 [8, 11, 12] 中相同的数据增强方案来训练图像,并在测试时应用大小为 224×224 的单次或 10 次裁剪。 遵循 [11, 12, 13],我们报告了验证集的分类错误。
所有网络都使用随机梯度下降 (SGD) 进行训练。 在 CIFAR 和 SVHN 上,我们分别使用批量大小 64 进行 300 和 40 轮训练。 初始学习率设置为 0.1,并在训练 epoch 总数的 50% 和 75% 处除以 10。 在 ImageNet 上,我们以 256 的批量大小训练模型 90 个时期。 学习率最初设置为 0.1,并在第 30 和 60 轮降低 10 倍。请注意,DenseNet 的幼稚实现可能包含内存效率低下的问题。 为了减少 GPU 上的内存消耗,请参阅我们关于 DenseNets [26] 的内存高效实现的技术报告。
遵循 [8],我们使用 1 0 − 4 10^{−4} 10−4 的权重衰减和 0.9 的 Nesterov 动量 [35] 没有阻尼。 我们采用[10]引入的权重初始化。 对于没有数据增强的三个数据集,即 C10、C100 和 SVHN,我们在每个卷积层(第一个除外)之后添加一个 dropout 层 [33],并将 dropout 率设置为 0.2。 对于每个任务和模型设置,测试错误仅评估一次。
我们训练具有不同深度 L 和增长率 k 的 DenseNets。 CIFAR 和 SVHN 的主要结果如表 2 所示。为了突出总体趋势,我们将所有优于现有最先进技术的结果用黑体标出,将总体最佳结果标为蓝色。
**准确性。**可能最明显的趋势可能来自表 2 的底行,这表明 L = 190 和 k = 40 的 DenseNet-BC 在所有 CIFAR 数据集上始终优于现有的最新技术。在 C10+ 上的错误率为 3.46%,在 C10+ 上为 17.18% C100+ 显着低于宽 ResNet 架构 [42] 实现的错误率。我们在 C10 和 C100(没有数据增强)上的最佳结果更加令人鼓舞:两者都比使用 drop-path 正则化的 FractalNet 低近 30% [17]。在 SVHN 上,使用 dropout,L = 100 和 k = 24 的 DenseNet 也 超过了目前由宽 ResNet 取得的最佳结果。然而,与较短的对应物相比,250 层 DenseNet-BC 并没有进一步提高性能。这可能是因为 SVHN 是一项相对容易的任务,极深的模型可能会过度拟合训练集。
**容量。**如果没有压缩或瓶颈层,DenseNets 会随着 L 和 k 的增加而表现得更好。我们将这主要归因于模型容量的相应增长。 C10+ 和 C100+ 列最好地证明了这一点。在 C10+ 上,随着参数数量从 1.0M、超过 7.0M 增加到 27.2M,误差从 5.24% 下降到 4.10%,最终下降到 3.74%。在 C100+ 上,我们观察到类似的趋势。这表明 DenseNets 可以利用更大更深模型的增强表示能力。它还表明它们没有过拟合或残差网络的优化困难 [11]。
**参数效率。**表 2 中的结果表明 DenseNets 比替代架构(特别是 ResNets)更有效地利用参数。在过渡层具有瓶颈结构和降维的 DenseNetBC 参数效率特别高。例如,我们的 250 层模型只有 1530 万个参数,但它始终优于其他模型,例如 FractalNet 和 Wide ResNets 等参数超过 30M 的模型。我们还强调,L = 100 和 k = 12 的 DenseNet-BC 实现了与使用 90 % 更少的参数。图 4(右图)显示了这两个网络在 C10+ 上的训练损失和测试误差。 1001 层深度 ResNet 收敛到较低的训练损失值,但具有类似的测试错误。我们将在下面更详细地分析这种影响。
**过拟合。**更有效地使用参数的一个积极副作用是 DenseNets 不太容易过度拟合。我们观察到,在没有数据增强的数据集上,DenseNet 架构相对于先前工作的改进特别明显。在 C10 上,改进表示错误相对减少了 29%,从 7.33% 减少到 5.19%。在 C100 上,减少约 30%,从 28.20% 到 19.64%。在我们的实验中,我们观察到在单个设置中潜在的过度拟合:在 C10 上,通过将 k =12 增加到 k =24 产生的参数增长 4 倍导致误差从 5.77% 适度增加到 5.83%。 DenseNet-BC 瓶颈和压缩层似乎是应对这一趋势的有效方法。
我们在 ImageNet 分类任务上评估具有不同深度和增长率的 DenseNet-BC,并将其与最先进的 ResNet 架构进行比较。为了确保两种架构之间的公平比较,我们通过 [8]1 采用公开可用的 ResNet Torch 实现来消除所有其他因素,例如数据预处理和优化设置的差异。我们简单地将 ResNet 模型替换为 DenseNetBC 网络,并保持所有实验设置与用于 ResNet 的设置完全相同。
我们在表 3 中报告了 ImageNet 上 DenseNets 的单次和 10 次验证错误。图 3 显示了 DenseNets 和 ResNets 的单次裁剪 top-1 验证错误作为参数数量(左)和 FLOP(对)。图中显示的结果表明,DenseNets 的性能与最先进的 ResNets 相当,同时需要更少的参数和计算来实现可比的性能。例如,具有 20M 参数的 DenseNet-201 模型产生与具有超过 40M 参数的 101 层 ResNet 类似的验证错误。从右侧面板可以观察到类似的趋势,该面板将验证误差绘制为 FLOP 数量的函数:需要与 ResNet-50 一样多的计算的 DenseNet 与需要两倍的 ResNet-101 执行相同计算。
值得注意的是,我们的实验设置意味着我们使用针对 ResNet 而非 DenseNet 优化的超参数设置。可以想象,更广泛的超参数搜索可能会进一步提高 DenseNet 在 ImageNet 上的性能。
===============================================================
从表面上看,DenseNets 与 ResNets 非常相似:Eq.(2) 与 Eq.(1) 的不同之处仅在于 H ℓ ( . ) H_{\ell}(.) Hℓ(.) 的输入是连接而不是求和的。然而,这种看似很小的修改的含义导致两种网络架构的行为截然不同。 模型紧凑。作为输入连接的直接结果,任何 DenseNet 层学习的特征图都可以被所有后续层访问。这鼓励在整个网络中重用特征,并导致更紧凑的模型。 图 4 中左侧的两个图显示了一个实验的结果,该实验旨在比较 DenseNets(左)和可比较的 ResNet 架构(中)的所有变体的参数效率。我们在 C10+ 上训练多个不同深度的小型网络,并将它们的测试精度绘制为网络参数的函数。与其他流行的网络架构(例如 AlexNet [16] 或 VGG-net [29])相比,具有预激活功能的 ResNet 使用更少的参数,同时通常会获得更好的结果 [12]。因此,我们将 DenseNet (k = 12) 与此架构进行比较。 DenseNet 的训练设置与上一节保持相同。 该图显示 DenseNet-BC 始终是 DenseNet 参数效率最高的变体。此外,为了达到相同的精度水平,DenseNet-BC 只需要 ResNets 参数的 1/3 左右(中间图)。这个结果与我们在图 3 中展示的 ImageNet 上的结果一致。图 4 中的右图表明,只有 0.8M 可训练参数的 DenseNet-BC 能够达到与 1001 层(预激活)相当的精度具有 10.2M 参数的 ResNet [12]。
隐性深度监督。 密集卷积网络精度提高的一种解释可能是单个层通过较短的连接从损失函数接收额外的监督。 人们可以将 DenseNets 解释为执行一种“深度监督”。 深度监督的好处之前已经在深度监督网络 (DSN; [20]) 中得到证明,该网络的每个隐藏层都有分类器,强制中间层学习判别特征。
DenseNets 以隐式方式执行类似的深度监督:网络顶部的单个分类器通过最多两个或三个转换层为所有层提供直接监督。 然而,DenseNets 的损失函数和梯度要简单得多,因为所有层共享相同的损失函数。
随机与确定性联系。 密集卷积网络和残差网络的随机深度正则化之间存在有趣的联系 [13]。 在随机深度中,残差网络中的层被随机丢弃,从而在周围层之间建立直接连接。 由于池化层永远不会被丢弃,因此网络会产生与 DenseNet 类似的连接模式:如果所有中间层都被随机丢弃,则同一池化层之间的任何两层直接连接的可能性很小。 尽管方法最终完全不同,但 DenseNet 对随机深度的解释可能会提供有关此正则化器成功的见解。
功能重用。 通过设计,DenseNets 允许层访问来自其所有前面层的特征图(尽管有时通过过渡层)。 我们进行了一项实验,以调查训练有素的网络是否利用了这个机会。 我们首先在 L = 40 和 k = 12 的 C10+ 上训练 DenseNet。对于块内的每个卷积层,我们计算分配给层 s 连接的平均(绝对)权重。 图 5 显示了所有三个密集块的热图。 平均绝对权重用作卷积层对其前一层的依赖性的替代。 位置 (‘; s) 中的红点表示层’平均而言,强烈使用了之前生成的 s 层的特征图。 从图中可以得出几个观察结果:
-
所有层将它们的权重分布在同一块内的许多输入上。这表明由非常早的层提取的特征确实直接被整个同一个密集块中的深层使用。
-
过渡层的权重也将它们的权重分散到前一个密集块内的所有层,表明信息从 DenseNet 的第一层到最后一层通过很少的间接传输。
-
第二个和第三个密集块中的层一致地为过渡层的输出(三角形的顶行)分配最小的权重,表明过渡层输出了许多冗余特征(平均权重较低)。这与 DenseNet-BC 的强大结果一致,其中这些输出被压缩。
-
虽然最右边显示的最终分类层也使用了整个密集块的权重,但似乎集中在最终特征图上,这表明可能在后期产生了一些更高级的特征网络。
在准确性上持续提高,而没有任何性能下降或过度拟合的迹象。在多种设置下,它在多个竞争激烈的数据集上取得了最先进的结果。此外,DenseNets 需要更少的参数和更少的计算来实现最先进的性能。由于我们在研究中采用了针对残差网络优化的超参数设置,因此我们相信可以通过更详细地调整超参数和学习率计划来进一步提高 DenseNets 的准确性。
在遵循简单的连接规则的同时,DenseNets 自然地集成了身份映射、深度监督和多样化深度的特性。它们允许在整个网络中重用特征,因此可以学习更紧凑,根据我们的实验,更准确的模型。由于其紧凑的内部表示和减少的特征冗余,DenseNets 可能是各种基于卷积特征的计算机视觉任务的良好特征提取器,例如 [4, 5]。我们计划在未来的工作中使用 DenseNets 研究这种特征转移。
致谢。 作者得到部分支持 NSF III-1618134、III-1526012、IIS-1149882、海军研究资助办公室 N00014-17-1-2175 以及比尔和梅琳达·盖茨基金会。 GH得到中国博士后理事会国际博士后交流奖学金项目(No.20150015)的支持。 ZL 得到中国国家基础研究计划 2011CBA00300、2011CBA00301、NSFC 61361136003 的支持。我们也感谢 Daniel Sedra、Geoff Pleiss 和 Yu Sun 的许多有见地的讨论。
如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-oNBImTpU-1713437302075)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!