Auto-Keras与AutoML:入门指南

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,100CU*H 3个月
简介: 不会机器学习?不会人工智能?没关系!自动化程序来了!

e56f1d439c659e0346b83c84f9556d74297222b3

在本教程中,你将学习如何使用Auto-Keras(Google的AutoML的开源替代品)来实现自动化机器学习和深度学习。

目前来说,深度学习从业者在数据集上训练神经网络时,主要正在尝试优化和平衡两个目标:

1.适合数据集性体系构;

2.实验调整一组超参数,这将导致模型具有高精度并能够推广到训练和测试集之外的数据。需要调整的典型超参数包括优化算法(SGDAdam等),学速率和学速率度以及正化等。

根据数据集和具体问题,深度学习专家可以进行数十到数百次实验,以找到神经网络架构和超参数之间的平衡,这些实验通常需要计算数百到数千小时。

刚刚提到的这种模式仅适用于专家,那非深度学习专家呢?

这就需要Auto-Keras和AutoML:

Auto-Keras和AutoML的最终目标是通过使用自动神经架构搜索(NAS)算法降低进入机器学习和深度学习的门槛。Auto-Keras和AutoML使非深度学习专家能够以最小的深度学习领域知识或实际数据来训练他们自己的模型。具有最小机器学习专业知识的程序员可以使用AutoML和Auto-Keras并应用这些算法,只需很少的努力即可实现最先进的性能。

听起来好得令人以置信?

你需要好好阅读这篇文章的其余部分以找出原因。

Auto-KerasAutoML:入指南

在本博文的第一部分中,我们将讨论自动机器学习(AutoML)和神经架构搜索(NAS),这种算法使得AutoML在应用于神经网络和深度学习时成为可能。我们还将简要讨论Google的AutoML,这是一套工具和库,允许具有有限机器学习专业知识的程序员在自己的数据上训练高精度模型。

当然,谷歌的AutoML是一种专有算法,AutoML的另一种选择是开源Auto-Keras、它是围绕Keras和PyTorch而构建。

然后,我将向你展示如何使用Auto-Keras自动训练网络以及评估它。

什么是自机器学AutoML)?

d1d6dbdcc0e4077d144f55e4c6321f7050069348

Auto-KerasGoogle AutoML的替代品。它可以帮助你自动训练模型,几乎不需要干预。对于新手深度学习从业者来说,它们是很好的选择。

在无监督学习之外,非专家的自动机器学习被认为是机器学习的“圣杯”。

想象一下通过以下方式自动创建机器学习模型的能力:

1.安装/使用Web界面;

2./接口指向你的数据;

3.动训练数据模型而无需整参数/需要深入了解其提供力的算法;

一些公司正试图创建这样的解决方案,其中一个就是谷歌的AutoML。Google AutoML使非常有限的机器学习经验的开发人员和工程师能够自动在他们自己的数据集上训练神经网络。

谷歌的底层AutoML算法是迭代的:

1.训练集上训练络;

2.测试集上估网络;

3.修改神架构;

4.调整超参数;

5.重复上述过程;

使用AutoML的程序员或工程师不需要定义他们自己的神经网络架构或调整超参数,AutoML会自动为他们做这件事。

架构搜索(NAS)使AutoML可能

fa5e00763031bc0baf58774ba297ac9a8c08b3c6

神经架构搜索(NAS)在搜索CIFAR-10的最佳CNN架构时,通过这些图表生成了一个模型。

Google的AutoML和Auto-Keras都采用了一种称为神经架构搜索(NAS)的算法。根据你的输入数据集,神经架构搜索算法将自动搜索最佳架构和相应参数。神经架构搜索基本上是用一组自动调整模型的算法取代深度学习工程师/从业者!

在计算机视觉和图像识别的背景下,神经架构搜索算法将:

1.接受训练数据集;

2.优化并找到称为单元的架构构建,然后让这些单元自动学习,这可能看起来类似于初始化,残留或激活微架构;

3.不断训练和搜索“NAS搜索空得更化的单元

如果AutoML系统的用户是经验丰富的深度学习从业者,那么他们可能会决定:

1.训练数据集的一个非常小的子集上运行NAS

2.找到一最佳的架构构建/元;

3.获取这些单元并手动定义在体系结构搜索期间找到的更深层次的网络版本;

4.使用自己的专业和最佳践,在完整的培集上训练网络;

这种方法是全自动机器学习解决方案与需要专家深度学习实践者的解决方案之间的混合体,通常这种方法比NAS自己训练的模型性能更好。

Auto-Keras:谷歌AutoML的开源替代品

0a720cbb534e85c57a38354aee0e94825f72ae67

Auto-Keras包是由在德克萨斯州A&M大学数据实验室团队开发。Auto-Keras是Google AutoML开源替代品。

Auto-Keras依然是利用神经架构搜索,但应用“网络态射”(在更改架构时保持网络功能)以及贝叶斯优化,以指导网络态射以实现更高效的神经网络搜索。你可以在Jin等人的2018年出版物Auto-KerasEfficient Neural Architecture Search with Network Morphism找到Auto-Keras框架的全部细节。

安装Auto-Keras

72af03b962e2fa1b529c0fcc1d51e6dcdbaf7b92

Auto-Keras包依赖于Python 3.6、TensorFlow和Keras。

正如Auto-Keras GitHub存储库所述,Auto-Keras处于“预发布”状态-它现在还不是正式版本。其次,Auto-Keras需要Python 3.6并且与Python 3.6兼容。如果你使用的是3.6以外的任何其他版本的Python,你将无法使用Auto-Keras软件包

如果你想要检查Python版本,只需使用以下命令:

python --version

如果你有Python 3.6,你可以使用pip安装Auto-Keras

pip install tensorflow # or tensorflow-gpu

pip install keras
pip install autokeras

使用Auto-Keras实现我们的训练脚本:

让我们继续使用Auto-Keras实现我们的训练脚本,打开train_auto_keras.py文件并插入以下代码:

# import the necessary packages
from sklearn.metrics import classification_report
from keras.datasets import cifar10
import autokeras as ak
import os
 
def main():
	# initialize the output directory
	OUTPUT_PATH = "output"

首先,我们在第2-5行导入必要的包:

·如前所述,我将使用scikit-learnclassification_report算我将在出文件中保存的统计信息

·将使用CIFAR-10数据集,因为它已经被内置到keras.datasets

·然后是导入import依赖项-autokeras,我已经将它用AK写代替。

·os是必需的,因会在建立出文件的路径,在各种操作系上容路径分隔符。

我们在第7行定义脚本的主要功能,由于Auto-Keras和TensorFlow处理线程的方式,我们需要将代码包装在main函数中。有关更多详细信息,请参阅GitHub问题线程

现在让我们初始化Auto-Keras的训练时间列表:

# initialize the list of training times that we'll allow
	# Auto-Keras to train for
	TRAINING_TIMES = [
		60 * 60,		# 1 hour
		60 * 60 * 2,	# 2 hours
		60 * 60 * 4,	# 4 hours
		60 * 60 * 8,	# 8 hours
		60 * 60 * 12,	# 12 hours
		60 * 60 * 24,	# 24 hours
	]

上述代码是限定了一组训练-TIMES,包括[1,2,4,8,12,24]小时。我们将使用Auto-Keras来探索更长的训练时间对精确度的影响。

让我们加载CIFAR-10数据集并初始化类名:

# load the training and testing data, then scale it into the
	# range [0, 1]
	print("[INFO] loading CIFAR-10 data...")
	((trainX, trainY), (testX, testY)) = cifar10.load_data()
	trainX = trainX.astype("float") / 255.0
	testX = testX.astype("float") / 255.0
 
	# initialize the label names for the CIFAR-10 dataset
	labelNames = ["airplane", "automobile", "bird", "cat", "deer",
		"dog", "frog", "horse", "ship", "truck"]

我们的CIFAR-10数据被加载并存储在第25行的训练/测试分组中。随后,我们将这个数据缩放到[0,1]的范围。接着我们会初始化我们的类labelNames,这10个类包含在CIFAR-10中。请注意,标签在这里很重要。

现在让我们开始循环遍历我们的TRAINING_TIMES,每次都使用Auto-Keras:

# loop over the number of seconds to allow the current Auto-Keras
	# model to train for
	for seconds in TRAINING_TIMES:
		# train our Auto-Keras model
		print("[INFO] training model for {} seconds max...".format(
			seconds))
		model = ak.ImageClassifier(verbose=True)
		model.fit(trainX, trainY, time_limit=seconds)
		model.final_fit(trainX, trainY, testX, testY, retrain=True)
 
		# evaluate the Auto-Keras model
		score = model.evaluate(testX, testY)
		predictions = model.predict(testX)
		report = classification_report(testY, predictions,
			target_names=labelNames)
 
		# write the report to disk
		p = os.path.sep.join(OUTPUT_PATH, "{}.txt".format(seconds))
		f = open(p, "w")
		f.write(report)
		f.write("\nscore: {}".format(score))
		f.close()

上面的代码块是今天脚本的核心。在第35行我们在每个TRAINING_TIMES上定义了一个循环,我们在其中做以下操作:

·初始化我的模型(AK.ImageClassifier),并让训练开始。注意,我并没有例化一个特定象的CNN,我也没有整超参数。因为Auto-Keras为我们处理所有这些

·一旦达到时间限制,采用Auto-Keras找到的最佳模型和参数+重新训练模型。

·评估和构建分类报告

·将分类报告与准确度分数一起写入磁,以便我们评估更长训练时间的影响。

我们将为每个TRAINING_TIMES重复此过程。

最后,我们将检查并启动执行的主线程:

# if this is the main thread of execution then start the process (our
# code must be wrapped like this to avoid threading issues with
# TensorFlow)
if __name__ == "__main__":
	main()

这里我们检查确保这是执行的主线程,然后是主函数。仅仅60行代码,我们就完成了使用CIFAR-10示例脚本编写Auto-Keras,但是我们还没有完成......

使用Auto-Keras训练神经网络

让我们继续使用Auto-Keras训练我们的神经网络。

请确保使用本教程的下载部分下载源代码。

从那里打开终端,导航到下载源代码的位置,然后执行以下命令:


$ python train_auto_keras.py
[INFO] training model for 3600 seconds max...   
Preprocessing the images.
Preprocessing finished.
 
Initializing search.
Initialization finished.
 
 
+----------------------------------------------+
|               Training model 0               |
+----------------------------------------------+
Using TensorFlow backend.
 
No loss decrease after 5 epochs.
 
 
Saving model.
+--------------------------------------------------------------------------+
|        Model ID        |          Loss          |      Metric Value      |
+--------------------------------------------------------------------------+
|           0            |   4.816269397735596    |         0.5852         |
+--------------------------------------------------------------------------+
 
 
+----------------------------------------------+
|               Training model 1               |
+----------------------------------------------+
Using TensorFlow backend.
Epoch-14, Current Metric - 0.83:  28%|██████▊                 | 110/387 [01:02<02:46,  1.67 batch/s]Time is out.
[INFO] training model for 86400 seconds max...  
Preprocessing the images.
Preprocessing finished.
 
Initializing search.
Initialization finished.
 
 
+----------------------------------------------+
|               Training model 0               |
+----------------------------------------------+
Using TensorFlow backend.
 
No loss decrease after 5 epochs.
...
+----------------------------------------------+
|              Training model 21               |
+----------------------------------------------+
Using TensorFlow backend.
 
No loss decrease after 5 epochs.
 
 
+--------------------------------------------------------------------------+
|    Father Model ID     |                 Added Operation                 |
+--------------------------------------------------------------------------+
|                        |             to_deeper_model 16 ReLU             |
|           16           |               to_wider_model 16 64              |
+--------------------------------------------------------------------------+
 
Saving model.
+--------------------------------------------------------------------------+
|        Model ID        |          Loss          |      Metric Value      |
+--------------------------------------------------------------------------+
|           21           |   0.8843476831912994   |   0.9316000000000001   |
+--------------------------------------------------------------------------+
+----------------------------------------------+
|              Training model 22               |
+----------------------------------------------+
Using TensorFlow backend.
Epoch-3, Current Metric - 0.9:  80%|████████████████████▊     | 310/387 [03:50<00:58,  1.31 batch/s]Time is out.
 
No loss decrease after 30 epochs.

在这里你可以看到我们的脚本正在指示Auto-Keras执行六组实验。

在NVIDIA K80 GPU上,总训练时间为3天多一点

Auto-Keras果:

7f29c4d03bb91fb3d1fd831f7c019bdd09ec7d4d

使用Auto-Keras通常是一个非常耗时的过程。使用Auto-Keras进行训练可在8-12小时范围内为CIFAR-10生成最佳型号。

在上图中,你可以看到训练时间(x轴)对使用Auto-Keras的总体准确度(y轴)的影响。较短的训练时间,即1小时和2小时,大约可以达到73%的准确性。一旦我们训练4小时,我们就能达到高达93%的准确率。训练8-12小时,我们就能获得95%的精确度了。超过8-12小时的训练不会提高我们的准确度,这意味着我们已达到饱和点并且Auto-Keras无法进一步优化。

Auto-KerasAutoML值得吗

a8baffb9689f0338f1158a8c68d32724b517b79a

Auto-Keras值得吗?这无疑是行业向前迈出的一大步,对那些没有深入学习领域知识的人尤其有用。

在无监督学习之外(从未标记数据自动学习模式),非专家的自动机器学习被认为是机器学习的“圣杯”。Google的AutoML和开源Auto-Keras软件包都试图将机器学习带给大众,即使是没有关键性技术的经验的程序员。

虽然Auto-Keras在CIFAR-10上工作得相当好,但是使用我之前关于深度学习,医学图像和疟疾检测的文章进行了第二组实验使用简化的ResNet架构获得了97.1%的准确率,该架构花费了不到一小时的时间进行训练。然后我让Auto-Keras在相同的数据集上运行24小时-结果只有96%的准确度,低于我自己定义的架构。

但不管怎样,谷歌的AutoML和Auto-Keras都是向前迈出的一大步。

本文由阿里云云栖社区组织翻译。

文章原标题《auto-keras-and-automl-a-getting-started-guide

译者:虎说八道,审校:袁虎。

文章为简译,更为详细的内容,请查看原文

相关实践学习
使用PAI+LLaMA Factory微调Qwen2-VL模型,搭建文旅领域知识问答机器人
使用PAI和LLaMA Factory框架,基于全参方法微调 Qwen2-VL模型,使其能够进行文旅领域知识问答,同时通过人工测试验证了微调的效果。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
缓存 网络协议 数据可视化
WinSCP下载安装并实现远程SSH本地服务器上传文件
WinSCP下载安装并实现远程SSH本地服务器上传文件
582 1
|
10月前
|
机器学习/深度学习 人工智能 监控
AutoTrain:Hugging Face 开源的无代码模型训练平台
AutoTrain 是 Hugging Face 推出的开源无代码模型训练平台,旨在简化最先进模型的训练过程。用户无需编写代码,只需上传数据即可创建、微调和部署自己的 AI 模型。AutoTrain 支持多种机器学习任务,并提供自动化最佳实践,包括超参数调整、模型验证和分布式训练。
838 4
AutoTrain:Hugging Face 开源的无代码模型训练平台
|
2月前
|
人工智能 自然语言处理 IDE
如何让 AI 成为你的编程搭档?一次真实重构告诉你答案
Cursor是一款面向开发者的智能代码编辑器,基于VS Code深度集成AI模型,支持自然语言编写代码、解释逻辑、重构和Bug查找。它提供Agent、Ask、Manual三种模式,具备模块级开发能力,能跨文件操作并主动学习代码库。但其效果依赖模型能力,对复杂跨应用任务仍有限。
如何让 AI 成为你的编程搭档?一次真实重构告诉你答案
|
Java Linux 开发工具
Linux下解压修改jar包并运行
Linux下解压修改jar包并运行
1074 0
|
6月前
|
人工智能 前端开发 Java
用git rebase命令合并开发阶段中多条commit提交记录
通过 `git rebase`,可以合并多个提交记录,使开发历史更简洁清晰。操作分为 6 步:查看提交历史 (`git log --oneline`)、设置需合并的提交数 (`git rebase -i HEAD~N`)、修改动作标识为 `s`(squash)、保存退出编辑、调整提交信息、强制推送至远程仓库 (`git push -f`)。此方法适合清理本地无关提交,但若有团队协作或冲突风险,需谨慎使用以避免问题。
662 60
|
10月前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
10月前
|
API 开发工具 开发者
探究亚马逊国际获得AMAZON商品详情 API 接口功能、作用与实际应用示例
亚马逊提供的Amazon Product Advertising API或Selling Partner API,使开发者能编程访问亚马逊商品数据,包括商品标题、描述、价格等。支持跨境电商和数据分析,提供商品搜索和详情获取等功能。示例代码展示了如何使用Python和boto3库获取特定商品信息。使用时需遵守亚马逊政策并注意可能产生的费用。
|
机器学习/深度学习 算法 文件存储
使用Python实现深度学习模型:神经架构搜索与自动机器学习
【7月更文挑战第5天】 使用Python实现深度学习模型:神经架构搜索与自动机器学习
216 2
|
11月前
|
SQL 监控 数据库
SQL语句性能分析技巧与方法
在数据库管理中,分析SQL语句的性能是优化数据库查询、提升系统响应速度的重要步骤
|
存储 运维 监控
我对 SRE 的理解
产品/基础技术研发 和 SRE 这两类角色是相互协作、相互服务的关系,拥有共同的目标:满足业务需求,更好服务业务。
3655 80
我对 SRE 的理解