机器之心报导
机器之心编辑部
主动机器学习作用能有多好?比方让 MobileNet1.0 backbone 的 YOLO3 逾越 ResNet-50 backbone 的 faster-rcnn 六个点?AutoGluon 的面世阐明,人类炼丹师或许越来越不重要了。
近来,亚马逊正式推出了开源代码库 AutoGluon。开发者依托仅仅几行代码,就能够编写出 AI 嵌入运用程序。
一个多月前,AutoGluon 在 GitHub 现已悄然上线,但最近几天才正式揭露发布。
开发者「Justin ho」抢先体会了一下 AutoGluon,以下是他的心得体会:
「ResNet-50 backbone + FasterRCNN 骑脸怎样输嘛。」
但,终究测验集成果十分出其不意,AutoGluon 经过 NAS 查找的成果直接高了六个点。
对此,李沐表明:
知乎用户 @Justin ho。
李沐在知乎上回应:
AutoML 运用大约 15 倍于单次练习的价值,得到的成果或许比手调的要好。这个首要是关于 CV 而言,尤其是 detection 模型,估计 GluonCV 里边模型很快赢来一大波提高。
AutoGluon 取了一个巧,咱们现在只支撑 GluonCV 和 GluonNLP 里边的使命,和额定的 Tabular 数据(因为一个小哥之前有过经历)。所以咱们咱们能够把曾经的很有经历东西放进去来减小搜参空间,然后提高速度。
当然 AutoGluon 仍是前期项目,我本来想是让团队再开发一些时刻再揭露。还有太多有意思的运用、算法、硬件加快能够做的。十分欢迎小伙伴能一同奉献。
AutoGluon:新特性
图解 AutoGluon。
AutoGluon 支撑易运用和易扩展的 AutoML,并专心于包括图画、文本或表格数据的深度学习和实践运用。AutoGluon 适用于机器学习初学者和专家,能够使他们:
经过几行代码即可快速地为数据构建深度学习原型计划;
运用主动超参数微调、模型挑选/架构查找和数据处理;
无需专家常识即可主动运用深度学习 SOTA 办法;
轻松地提高现有定制模型和数据管道,或许依据用例自界说 AutoGluon。
支撑功用
现在 AutoGluon 现已支撑了以下一些运用:
表格猜测:依据数据表中一些列的值猜测其他列的值;
图画分类:辨认图画中的首要目标;
目标检测:凭借图画中的鸿沟框检测多个目标;
文本分类:依据文本内容做出猜测。
除了这些之外,AutoGluon 还能够直接进行神经架构查找,运用起来较为简洁。
怎样运用 AutoGluon 呢?官方文档中供给了示例代码,机器之心进行了节选:
示例代码
表格猜测
关于用表格方式(存储为 CSV 文件等)来表明的规范数据集来说,AutoGluon 能够主动依据其他列的值来猜测某一列值。只需要调用一次 fit(),就能够在规范的监督学习使命(包括分类和回归)中完成很高的准确性,而无需数据清洗、特征工程、超参数优化、模型挑选等等繁琐的流程。
首要,导入 AutoGluon 中猜测表格的相关 api。
import autogluon as agfrom autogluon import TabularPrediction as task
加载数据(这儿运用官方教程供给的数据集)。
train_data = task.Dataset(file_path='https://autogluon.s3.amazonaws.com/datasets/Inc/train.csv')train_data = train_data.head(500) # subsample 500 data points for faster demoprint(train_data.head())
表格 train_data 中的每一行都对应独自的练习样本。在官方教程供给的数据会集,每一行对应单个人,而且表格列包括各种计算特征。
咱们先来用这些特征猜测一下某个人的收入是否逾越 5 万美元,相关信息记录在该表的 class 列中。
然后进行练习:
dir = 'agModels-predictClass' # specifies folder where to store trained modelspredictor = task.fit(train_data=train_data, label=label_column, output_directory=dir)
加载测验集并测验:
test_data = task.Dataset(file_path='https://autogluon.s3.amazonaws.com/datasets/Inc/test.csv')y_test = test_data[label_column] # values to predicttest_data_nolab = test_data.drop(labels=[label_column],axis=1) # delete label column to prove we're not cheatingprint(test_data_nolab.head())
图画分类
和表格猜测使命相似,AutoGluon 能够主动对图画进行分类,并运用 GPU 进行练习。
首要加载图画分类 api:
import autogluon as agfrom autogluon import ImageClassification as task
然后只需要短短几行代码就能够构建一个图画分类器(数据集为教程自带数据集):
classifier = task.fit(dataset,epochs=10,ngpus_per_trial=1,verbose=False)
打印练习成果中最好的:
print('Top-1 val acc: %.3f' % classifier.results['best_reward'])
对单一图画进行测验,这儿的 ag.get_gpu_count() 用于检测是否有 GPU,如有则大于 0。
# skip this if training FashionMNIST on CPU.if ag.get_gpu_count() > 0: image = 'data/test/BabyShirt/BabyShirt_323.jpg' ind, prob = classifier.predict(image)print('Theinputpictureisclassifiedas[%s],withprobability%.2f.'%(dataset.init().classes[ind.asscalar()],prob.asscalar()))
在测验集上测验并打印成果:
test_acc = classifier.evaluate(test_dataset)print('Top-1 test acc: %.3f' % test_acc)
神经架构查找
关于 AutoML 的结构来说,神经架构查找是很重要的一个运用。近来,盛行的 NAS 办法,如 ENAS 和 ProxylessNAS 都经过构建一个超网络(supernet)并在不同的架构之间同享权重,然后加快查找速度。
ProxylessNAS 架构。
AutoGluon 也供给了相应的功用。
以「为硬件设备查找适宜的神经网络架构」为例:
首要,导入相关 api。
import autogluon as agimport mxnet as mximport mxnet.gluon.nn as nn
然后运用 MXNet 结构构建一个 CNN 的根底架构:
class Identity(mx.gluon.HybridBlock): def hybrid_forward(self, F, x): return xclass 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') defhybrid_forward(self,F,x): returnself.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) defhybrid_forward(self,F,x): returnself.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
https:///2020/01/09/amazons-autogluon-produces-ai-models-with-as-little-as-three-lines-of-code/