性能超过人类炼丹师,AutoGluon 低调开源
|
然后使用 MXNet 框架构建一个 CNN 的基础架构: class Identity(mx.gluon.HybridBlock): def hybrid_forward(self, F, x): return x class ConvBNReLU(mx.gluon.HybridBlock): def __init__(self, in_channels, channels, kernel, stride): super().__init__() padding = (kernel - 1) // 2 self.conv = nn.Conv2D(channels, kernel, stride, padding, in_channels=in_channels) self.bn = nn.BatchNorm(in_channels=channels) self.relu = nn.Activation('relu') def hybrid_forward(self, F, x): return self.relu(self.bn(self.conv(x)))构建一个 ENAS 单元用于架构搜索: from autogluon.contrib.enas import * @enas_unit() class ResUnit(mx.gluon.HybridBlock): def __init__(self, in_channels, channels, hidden_channels, kernel, stride): super().__init__() self.conv1 = ConvBNReLU(in_channels, hidden_channels, kernel, stride) self.conv2 = ConvBNReLU(hidden_channels, channels, kernel, 1) if in_channels == channels and stride == 1: self.shortcut = Identity() else: self.shortcut = nn.Conv2D(channels, 1, stride, in_channels=in_channels) def hybrid_forward(self, F, x): return self.conv2(self.conv1(x)) + self.shortcut(x)使用序列代码块(Sequential Block)创建 ENAS 网络。 mynet = ENAS_Sequential( ResUnit(1, 8, hidden_channels=ag.space.Categorical(4, 8), kernel=ag.space.Categorical(3, 5), stride=2), ResUnit(8, 8, hidden_channels=8, kernel=ag.space.Categorical(3, 5), stride=2), ResUnit(8, 16, hidden_channels=8, kernel=ag.space.Categorical(3, 5), stride=2), ResUnit(16, 16, hidden_channels=8, kernel=ag.space.Categorical(3, 5), stride=1, with_zero=True), ResUnit(16, 16, hidden_channels=8, kernel=ag.space.Categorical(3, 5), stride=1, with_zero=True), nn.GlobalAvgPool2D(), nn.Flatten(), nn.Activation('relu'), nn.Dense(10, in_units=16),) mynet.initialize()#mynet.graph定义奖励函数: reward_fn = lambda metric, net: metric * ((net.avg_latency / net.latency) ** 0.1)最后开始训练即可: scheduler = ENAS_Scheduler(mynet, train_set='mnist',reward_fn=reward_fn, batch_size=128, num_gpus=1,warmup_epochs=0, epochs=1, controller_lr=3e-3,plot_frequency=10, update_arch_frequency=5) scheduler.run()AutoGluon 使用怎么样 目前 AutoGluon 网站已经有众多教程了,开发者能用它快速处理各种结构化与非结构化数据。对于资深开发者,AutoGluon 还提供了一系列定制化的指南,我们能学会如何使用 AutoGluon 的 API 自动提升预测性能。 当然,由于 AutoGluon 目前仍在完善中,有些开发者表示,目前 AutoGluon 文档主要包含了核心流程,还有一些额外的工具没有详细介绍。 在知乎评论中,很多开发者表示 AutoGluon 在视觉任务上的效果很好,甚至如果采用 AutoGluon 自带的 YOLOV3(mobilenet1.0 backbone),它的效果还要优于手动调参的 FasterRCNN(resnet50 backbone)。 这是非常令人惊讶的,毕竟 YOLOV3是一种单阶段的检测器,它更擅长推理速度。而 FasterRCNN 这种二阶段检测器,虽然推理速度没那么快,但效果一般要更好。更不用说 AutoGluon 采用的骨干网络只是 MobileNet 1.0,它的表达能力远没有 ResNet 50强。综合这两种因素,AutoGluon 超过手动效果,就显得非常令人惊讶了。 之前李沐就曾表示 AutoGluon 的使用代价差不多是单次训练的15倍,所以在15次尝试中,我们还真不一定能找到超越 AutoGluon 的整套超参。不过也有开发者认为要是有一个比较好的搜索空间,随机搜索15次也能找到比较好的超参。李沐说:「AutoGluon 15次 Search 的结果差不多类似于 Random Search 30次,但前提是 Search Space 构造的比较好,不要太大与太小。」 目前很多开发者与研究者都已经在尝试 AutoGluon 的效果,有些简单调参工作既然机器做得更好,那么为什么不交给它们呢?算法工程师该做的,应该是理解业务与数据,并作出新的调整与创新。 参考链接: https://github.com/awslabs/autogluon (编辑:52刷机网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
