问鼎app官方下载 想入门设计卷积神经网络?这是一份综合设计指南
由 Machine Heart 编译
参加者:努尔哈赤努尔、刘晓坤
本文可以作为设计指南,为特定分类任务的 CNN 设计提供指导。作者从网络类型、架构设计、数据处理和迁移学习等方面介绍了 CNN 设计过程中使用的方法,重点关注准确率、速度和内存消耗之间的权衡。
您想开始图像分类,但不知道从哪里开始。您应该使用哪个预训练网络?如何修改网络以使其满足您的需求?您的网络应该有 20 层还是 100 层?哪个最快、最准确?这些都是您在选择最佳 CNN 进行图像分类时会面临的许多问题。
在选择用于图像分类的 CNN 时,有三个非常重要的指标需要优化:准确率、速度和内存消耗。这些指标上的性能取决于您选择的 CNN 以及对其进行的任何修改。不同的网络(例如 VGG、Inception 和 ResNet 等)对这些指标的权衡不同。此外,您还可以修改网络结构,例如通过削减一些层、添加一些层、在网络内部使用扩张卷积或不同的网络训练技术。
这篇文章可以用作设计指南,为设计特定分类任务的 CNN 提供指导。具体来说,我们将重点关注 3 个主要指标:准确率、速度和内存消耗。我们将研究许多不同的分类 CNN,并探索它们相对于这 3 个指标的属性。我们还将研究对这些基本 CNN 的可能修改以及这些修改如何影响这些指标。最后,我们将研究如何为特定的图像分类任务最佳地设计 CNN。
网络类型
网络类型和这 3 个指标之间存在明显的权衡。首先,您肯定会想要使用 Inception 或 ResNet 类型的设计。它们比 VGGNet 和 AlexNet 更新,并且在速度和准确性之间提供了更好的权衡(如上图所示)。斯坦福大学的 Justin Johnson 对其中一些进行了出色的基准测试()。
Inception 和 ResNet 的选择,确实是速度和准确率之间的权衡:如果追求准确率,就用超深的 ResNet;如果追求速度,就用 Inception。
使用巧妙的卷积设计来减少运行时间和内存使用量
CNN 总体设计方面的最新进展催生了一些非常有趣的替代方案,这些方案可以在不损失太多准确度的情况下加快 CNN 速度并减少内存使用量。所有这些方法都可以轻松集成到上述任何一类卷积神经网络中。
网络深度
这很简单:通常添加更多层会提高准确率,但会牺牲一些速度和内存。然而,我们了解到,这种权衡受制于边际效应,也就是说,我们添加的层越多,每增加一层,准确率的提升就越小。
激活函数
最近关于激活函数的争论很多。但是,一个好的经验法则是从 ReLU 开始。使用 ReLU 通常一开始就能给你带来一些好的结果。它不需要像 ELU、PReLU 或 LeakyReLU 那样进行一些繁琐的调整。一旦你确定你的设计与 ReLU 配合良好,你就可以调整其他部分并调整它们的参数,以尝试最终提高准确性。
卷积核大小
你可能会认为使用较大的内核总是会以牺牲速度和内存为代价获得最高的准确率。然而,情况并非总是如此,因为研究一再发现问鼎娱乐下载链接入口,使用较大的内核会使网络难以发散。使用较小的内核(例如 3×3)更好。ResNet 和 VGGNet 都相当透彻地说明了这一点。正如这两篇论文所示问鼎app官方下载,你也可以使用 1×1 内核来减少特征数量。
扩张卷积
为了使用远离中心的像素,扩张卷积使用卷积核权重之间的空间。这允许网络在不增加参数数量的情况下指数级扩展感受野,这意味着内存消耗根本没有增加。已经证明,扩张卷积可以在稍微牺牲速度的情况下提高网络准确率。
数据增强
你应该始终进行数据增强。事实证明,使用更多数据可以持续提高性能,甚至达到一定程度()。通过数据增强,你可以免费获得更多数据。增强的类型取决于你的应用程序。例如,如果你正在开发自动驾驶汽车应用程序,你可能会在路上遇到汽车、树木和建筑物,因此垂直翻转图像是没有意义的。但是,你肯定会遇到由于天气变化或场景变化而导致的光照变化,通过改变光照和水平翻转来增强数据是有意义的。你可以看看这个数据增强库()
训练优化器
当您最终训练网络时,有几种优化算法可供选择。许多人说 SGD 在准确度方面能给出最佳结果,根据我的经验,这是真的。但是,调整学习率设置和参数既繁琐又具有挑战性。另一方面,虽然使用自适应学习率(例如 Adam、Adagrad 或 Adadelta)更容易、更快捷,但您可能无法获得与 SGD 相同的最佳准确度。
最好让优化器遵循与激活函数相同的“风格”:先使用最简单的优化器问鼎娱乐,看看它是否有效,然后使用更复杂的优化器进行调整和优化。我个人建议从 Adam 开始,因为根据我的经验,它最容易使用:设置一个不太高的学习率,通常默认为 0.0001,你通常会得到一些非常好的结果。然后你可以从头开始使用 SGD,甚至可以从 Adam 开始,然后用 SGD 进行微调。事实上,论文发现使用 Adam 并在中间切换到 SGD 可以以最简单的方式实现最佳准确率。看看论文中的这张图:
类别平衡
在许多情况下,你会遇到不平衡的数据,尤其是在实际应用中。让我们举一个简单的现实世界示例:出于安全原因,你正在训练一个深度网络来预测输入视频中的人是否持有致命武器。但在你的训练数据中,只有 50 个视频中的人持有武器,而 1,000 个视频中的人没有持有武器!如果你立即用这些数据训练你的网络,你的模型肯定会偏向于预测这个人没有持有武器,偏差很大。
解决类别不平衡问题可以采用以下方法:
优化你的迁移学习
对于大多数应用来说,使用迁移学习是比从头开始训练网络更好的选择。但是,你需要选择丢弃哪些层以及保留哪些层。这在很大程度上取决于你的数据。你的数据与预训练网络(通常在 ImageNet 上训练)使用的数据越相似,你需要重新训练的层就越少,反之亦然。例如,假设你想训练一个网络来区分图像是否包含葡萄,因此你有大量包含葡萄和不包含葡萄的图像。这些图像与 ImageNet 中使用的图像非常相似,因此你只需要重新训练最后几层,也许只需要完全连接的层。但是,如果你试图分类外太空图像是否包含行星,这些数据与 ImageNet 中的数据非常不同,因此你还需要重新训练后面的卷积层。简而言之,应遵循以下原则:
总结
本文提供了设计用于图像分类应用的 CNN 的全面指南。希望您阅读本文时能获得乐趣,并学到一些新的有用知识。
原文链接:
我要评论