AutoML : 更有效地设计神经网络模型

雷锋网  •  扫码分享
我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

AutoML : 更有效地设计神经网络模型

字幕组双语原文: AutoML : 更有效地设计神经网络模型

英语原文: AutoML: Creating Top-Performing Neural Networks Without Defining Architectures

翻译:雷锋字幕组( chenx2ovo )


自动化机器学习,通常被称为AutoML,是自动化构建指神经网络结构。AutoML通过智能架构的操作,可以让大家更方便、更快速的进行深度学习的研究。

在本文中,我们将介绍AutoML的以下内容:

  • 如何安装AutoKeras来进行神经网络架构搜索

  • 在使用结构化、图像和文本数据进行回归和分类任务中,如何使用AutoKeras找到最佳的神经网络架构。

  • 如何评估、预测、导出(搜索到的模型)到Keras/TensorFlow,并且查看搜索到的高性能模型的架构。

关于AutoKeras的一个简短介绍

  • 通过AutoKeras这个神经架构搜索算法,我们可以找到最好的神经网络架构,比如层中神经元的数量,架构的层数,加入哪些层,层的特定参数,比如Dropout中的滤波器大小或掉落神经元的百分比等等。当搜索完成后,你可以将模型作为常规的TensorFlow/Keras模型使用。

  • 通过使用AutoKeras,你可以建立一个具有复杂组件的模型,比如嵌入和空间缩减,这些对于那些还在学习深度学习的人来说是不太容易理解的。

  • 当AutoKeras创建模型时,会进行大量预处理操作,如矢量化或清理文本数据等等,都会自动完成并优化。

  • 启动和训练搜索只需要两行代码。AutoKeras拥有一个类似Keras的界面,所以它非常易于使用。

是不是很激动,让我们正式开始叭!

安装

在安装前,请先确保你安装了以下包:

  • Python 3 (AutoKeras不能在Python 2上运行)  

  • TensorFlow ≥ 2.3.0 (AutoKeras基于TensorFlow构建

在命令行中,运行下列两个命令。这样就能正确安装AutoKeras。注意,不能在Kaggle笔记本中运行,最好在本地环境中运行。


作为测试,在编码环境中运行import autokeras以确保一切正常。 

结构化数据的分类/回归任务

我们从著名的iris数据集开始,该数据集可以从sklearn的几个简单的示例数据集中导入。导入的数据是一个字典,有两个键值对组成,"data "和 "target"。

然而,由于target是分类标签(三个类别),我们需要对它进行虚拟编码。由于结果是一个pandas DataFrame,并且需要一个NumPy数组,我们在pd.get_dummies之后调用.values(独热编码)。

AutoML : 更有效地设计神经网络模型

 调用X.shape得到(150,4),调用y.shape得到(150,3)。这是说明X中包含了150行4列,y中有3个不同的类别(因此有3列)。为了评估我们的模型,我们将把数据分成训练集和测试集。


 查看数组的尺寸是一个很好的做法:


  • X_train: (105, 4)

  • X_test: (45, 4)

  • y_train: (105, 3)

  • y_test: (45, 3)

太好了!一切都很顺利。我们可以开始使用Autokeras了。

导入Autokeras通常没有问题。StructuredDataClassifier是一个在 "结构化数据 ",或者说是带有列和标签的标准二维数据上工作的搜索对象。max_trials参数表示要测试的模型的最大数量;在iris数据集上,由于数据集规模较小,这个参数可以设置较高一些。通常在达到max_trials之前搜索就会结束(它作为一个上限)。


对于回归问题,使用StructuredDataRegressor。

我们可以通过调用.fit()来启动搜索过程。verbose是一个参数,可以设置为0或1,这取决于你是否希望模型输出训练相关信息,比如潜在网络的架构和每个epoch的搜索情况。然而,每个潜在架构都有数百个epoch,所以开启这一项可能会占用空间并减慢训练速度。


建议设置verbose=1,来显示整个训练的过程。因为整个搜索过程至少会持续几分钟才能完成。如下面示例的输出:

AutoML : 更有效地设计神经网络模型

如果你愿意的话,可以观察搜索到架构随着时间的推移而不断变化,以及哪些元素会进入最终的神经网络。这一过程很有意思。

在我的本地环境中,在没有GPU加速的情况下,总共花了1小时左右才跑完15次试验。

一旦你的模型被拟合,我们就可以评估它的性能或进行预测。一般来说,这一过程速度较快,所以verbose可以设置为0。

AutoML : 更有效地设计神经网络模型

为了查看模型结构的更多细节并保存它,我们需要使用model = search.export_model()对其进行导出。这里的model是一个标准的TensorFlow/Keras模型,而不是AutoKeras对象。

调用model.summary()可以打印出搜索到的最佳架构。

AutoML : 更有效地设计神经网络模型

保存模型权重,使用model.save(‘filepath/weights.h5’).

图像分类/回归

图像分类和回归的工作原理很像标准结构化数据的分类和回归,但他们所使用的神经网络的建立使用了卷积神经网络的元素,比如卷积层、最大池化和扁平化。其中所有的参数都是可学习的。

例如,我们在MNIST数据集上实验,从28乘28的图像中找到一个卷积神经网络来识别数字。Keras数据集提供了一种方便的方法来检索这些数据,但需要将y变量转换为虚变量。

AutoML : 更有效地设计神经网络模型

我们看一下这些数据的尺寸:


  • X_train: (60000, 28, 28)

  • X_test: (10000, 28, 28)

  • y_train: (60000, 10)

  • y_test: (10000, 10)

很强!AutoKeras还可以处理四维数据(多通道的彩色图像)。我们可以用ImageClassifier创建一个搜索对象(或者创建ImageRegressor用于回归任务)。

AutoML : 更有效地设计神经网络模型

*如果您正在运行多个搜索,请在定义搜索对象时添加一个参数overwrite=True (ak.object(overwrite=True, max_trials=x))。否则会出现错误。

评估、预测和导出模型的过程与结构化分类器和回归器一样。需要注意的是,对图像数据进行神经架构搜索会花费更长的时间。

文本分类/回归

AutoKeras不需要任何文本矢量化操作,这很方便,因为当前有很多方法可以完成这一操作,而且每一种方法的实现都很漫长。在AutoKeras中这一操作这是由模型学习的。

我们使用20个新闻组数据集,它由属于20个不同类别的若干新闻摘录组成。为了节省时间和计算开销,我们只选择导入其中的四个类别,并且调大了测试集划分规模(整个数据集的一半)。

AutoML : 更有效地设计神经网络模型

X_train和X_test分别是由1128个原始文本字符串组成的数组,y_train和y_test分别是形状(1128, 4)的数组。

请注意,AutoKeras可以处理可变长度的字符串!输入的每个字符串不需要长度相同。

接下来,让我们建立我们的文本分类器/回归器。

AutoML : 更有效地设计神经网络模型

*如果您正在运行多个搜索,请在定义搜索对象时添加一个参数overwrite=True (ak.object(overwrite=True, max_trials=x))。否则会出现错误。

评估、预测和导出与结构化分类器和回归器一样进行。

值得一看的是提出的网络。NLP和深度学习之间的融合可以说是非常先进,像嵌入、空间还原等复杂的元素不需要明确调用就可以实现,这很神奇。

AutoML : 更有效地设计神经网络模型

有了AutoKeras,深度学习更容易被所有人使用!


雷锋字幕组是一个由 AI 爱好者组成的翻译团队,汇聚五百多位志愿者的力量,分享最新的海外AI资讯,交流关于人工智能技术领域的行业变革与技术创新的见解。

团队成员有大数据专家、算法工程师、图像处理工程师、产品经理、产品运营、IT咨询人、在校师生;志愿者们来自IBM、AVL、Adobe、阿里、百度等知名企业,北大、清华、港大、中科院、南卡罗莱纳大学、早稻田大学等海内外高校研究所。

如果,你也是位热爱分享的AI爱好者。欢迎与雷锋字幕组一起,学习新知,分享成长。

AutoML : 更有效地设计神经网络模型

雷锋网 (公众号:雷锋网) 雷锋网

雷锋网版权文章,未经授权禁止转载。详情见。

AutoML : 更有效地设计神经网络模型

随意打赏

提交建议
微信扫一扫,分享给好友吧。