Auto-Keras与AutoML:入门指南

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

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

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

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

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

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

这就需要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)?

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

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

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

1.安装库/使用Web界面;

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

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

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

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

1.在训练集上训练网络;

2.在测试集上评估网络;

3.修改神经网络架构;

4.调整超参数;

5.重复上述过程;

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

架构搜索(NAS)使AutoML可能

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

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

1.接受输入训练数据集;

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

3.不断训练和搜索“NAS搜索空间”以获得更优化的单元;

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

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

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

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

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

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

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

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

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

安装Auto-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 osdef main():# initialize the output directoryOUTPUT_PATH = "output"

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

·如前所述,我们将使用scikit-learn的classification_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 forTRAINING_TIMES = [60 * 60,		# 1 hour60 * 60 * 2,	# 2 hours60 * 60 * 4,	# 4 hours60 * 60 * 8,	# 8 hours60 * 60 * 12,	# 12 hours60 * 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.0testX = testX.astype("float") / 255.0# initialize the label names for the CIFAR-10 datasetlabelNames = ["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 forfor seconds in TRAINING_TIMES:# train our Auto-Keras modelprint("[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 modelscore = model.evaluate(testX, testY)predictions = model.predict(testX)report = classification_report(testY, predictions,target_names=labelNames)# write the report to diskp = 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的结果:

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

Auto-Keras和AutoML值得吗?

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

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

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

 

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TensorFlow 2.0深度强化学习指南

在本教程中&#xff0c;我将通过实施Advantage Actor-Critic(演员-评论家&#xff0c;A2C)代理来解决经典的CartPole-v0环境&#xff0c;通过深度强化学习&#xff08;DRL&#xff09;展示即将推出的TensorFlow2.0特性。虽然我们的目标是展示TensorFlow2.0&#xff0c;但我将尽…

互联网诞生记: 浪成于微澜之间

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 老姜出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;“我早就预言了互联网。1975年&#xff0c;所有的技术都已经准备好了&#xff1b;1985年&#xff0c;所有的技术都应该很平常了&#xff1b;而直到199…

“有趣”的投影:当PCA失效时怎么办?

目前&#xff0c;大多数的数据科学家都比较熟悉主成分分析 (Principal Components Analysis&#xff0c;PCA)&#xff0c;它是一个探索性的数据分析工具。可以这样简要的描述&#xff1a;研究人员经常使用PCA来降低维度&#xff0c;希望在他们的数据中找出有用的信息&#xff0…

线程最最基础的知识

戳蓝字“CSDN云计算”关注我们哦&#xff01;什么是线程试想一下没有线程的程序是怎么样的&#xff1f;百度网盘在上传文件时就无法下载文件了&#xff0c;得等文件上传完成后才能下载文件。这个我们现在看起来很反人性&#xff0c;因为我们习惯了一个程序同时可以进行运行多个…

特征工程自动化如何为机器学习带来重大变化

随着技术的快速发展&#xff0c;在数据科学领域中&#xff0c;包括库、工具和算法等总会不断地变化的。然而&#xff0c;一直都有这么一个趋势&#xff0c;那就是自动化水平不断地提高。 近些年来&#xff0c;在模型的自动化选择和超参数调整方面取得了一些进展&#xff0c;但…

序列模型简介——RNN, Bidirectional RNN, LSTM, GRU

既然我们已经有了前馈网络和CNN&#xff0c;为什么我们还需要序列模型呢&#xff1f;这些模型的问题在于&#xff0c;当给定一系列的数据时&#xff0c;它们表现的性能很差。序列数据的一个例子是音频的剪辑&#xff0c;其中包含一系列的人说过的话。另一个例子是英文句子&…

行!人工智能玩大了!程序员:太牛!你怎么看?

人工智能真的玩大了吗&#xff1f;人工智能行业的人才真的“爆发了&#xff1f;”AI程序员究竟怎么样&#xff1f;中国AI前景分析 程序员与远方最新参考&#xff0c;是12月2日出炉的《人工智能技术专利深度分析报告》。中国AI专利&#xff0c;已经位于世界前列&#xff0c;且正…

可应用于实际的14个NLP突破性研究成果(一)

语言理解对计算机来说是一个巨大的挑战。幼儿可以理解的微妙的细微差别仍然会使最强大的机器混淆。尽管深度学习等技术可以检测和复制复杂的语言模式&#xff0c;但机器学习模型仍然缺乏对我们的语言真正含义的基本概念性理解。 但在2018年确实产生了许多具有里程碑意义的研究…

开发函数计算的正确姿势——网页截图服务

前言 首先介绍下在本文出现的几个比较重要的概念&#xff1a; 函数计算&#xff08;Function Compute&#xff09;: 函数计算是一个事件驱动的服务&#xff0c;通过函数计算&#xff0c;用户无需管理服务器等运行情况&#xff0c;只需编写代码并上传。函数计算准备计算资源&am…

如何关闭计算机的f12功能键,win10如何关闭快捷键?win10关闭F1~F12快捷键的方法

win10如何使用快捷键关闭?在win10系统中我们按下F1~F12原本可以正常使用系统中的功能。而然在笔记本中F1~F12竟然被笔记本中的功能所替代了&#xff0c;例如&#xff1a;打开/关闭 无线网卡&#xff0c;屏幕亮度加减、系统音量大小等&#xff0c;导致我们在使用F1~F12的时候只…

阿里巴巴宣布架构调整;英伟达放大招!重磅发布 ​TensorRT 7 ,支持超千种计算变换;苹果、谷歌和亚马逊罕见结盟……...

戳蓝字“CSDN云计算”关注我们哦&#xff01; 嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周五第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…

阿里开源分布式事务解决方案 Fescar 全解析

广为人知的阿里分布式事务解决方案&#xff1a;GTS&#xff08;Global Transaction Service&#xff09;&#xff0c;已正式推出开源版本&#xff0c;取名为“Fescar”&#xff0c;希望帮助业界解决微服务架构下的分布式事务问题&#xff0c;今天我们一起来深入了解。 FESCAR o…

鲜为人知的混沌工程,到底哪里好?

混沌工程属于一门新兴的技术学科&#xff0c;行业认知和实践积累比较少&#xff0c;大多数IT团队对它的理解还没有上升到一个领域概念。阿里电商域在2010年左右开始尝试故障注入测试的工作&#xff0c;希望解决微服务架构带来的强弱依赖问题。通过本文&#xff0c;你将了解到&a…

将视觉深度学习模型应用于非视觉领域

介绍 近些年来&#xff0c;深度学习技术已经彻底改变了计算机视觉领域。由于迁移学习和各种各样的学习资源的出现&#xff0c;任何人都可以通过使用预训练的模型&#xff0c;将其应用到自己的工作当中&#xff0c;以此获得非常好的结果。随着深度学习越来越商业化&#xff0c;…

如何在Flutter上优雅地序列化一个对象

序列化一个对象才是正经事 对象的序列化和反序列化是我们日常编码中一个非常基础的需求&#xff0c;尤其是对一个对象的json encode/decode操作。每一个平台都会有相关的库来帮助开发者方便得进行这两个操作&#xff0c;比如Java平台上赫赫有名的GSON&#xff0c;阿里巴巴开源…

腾讯汤道生:2020年加大投入产业互联网生态建设

新一轮产业革命正在不断深化&#xff0c;为全球经济发展提供了历史性机遇。如何通过数字化、智能化等手段打通产业链不同环节&#xff0c;优化产业效率&#xff0c;实现产业协同&#xff0c;加速产业转型升级&#xff1f; “与合作伙伴‘共创’是产业互联网发展最重要的路径&am…

优酷IPv6改造纪实:视频行业首家拥抱下一代网络技术

阿里妹导读&#xff1a;2018年双11前&#xff0c;优酷开启了IPV6的大门。9月份PC端业务开启灰度&#xff0c;迎来首位IPV6 VIP用户后&#xff0c;优酷移动客户端也马不停蹄地加入灰度大军。从0到1&#xff0c;花了几个月&#xff1b;从10到1000&#xff0c;花了几天&#xff1b…

服务器上的文件怎么取名,给新的服务器取名你会取神马?

亲爱的谕霸们&#xff1a;本周话题 emmmm.....又一次想话题想到脑壳痛&#xff0c;忽然想到&#xff0c;要不然大家也来想一个&#xff0c;于是乎就是......噢对了&#xff0c;看到论坛的宝宝们都晒出来2018年新年历了&#xff0c;怎么能少了APP的宝宝们&#xff1f;&#xff1…

NVIDIA发布全新推理软件,开创交互式会话AI新时代!

近日&#xff0c; NVIDIA发布了一款突破性的推理软件。借助于该软件&#xff0c;全球各地的开发者都可以实现会话式AI应用&#xff0c;大幅减少推理延迟。而此前&#xff0c;巨大的推理延迟一直都是实现真正交互式互动的一大阻碍。 NVIDIA TensorRT™ 7作为NVIDIA第七代推理软件…

可应用于实际的14个NLP突破性研究成果(二)

论文摘要 尽管最近在训练高质量的句子嵌入上做出了很多的努力&#xff0c;但是大家仍然对它们所捕捉的内容缺乏了解。基于句子分类的‘Downstream’tasks通常用于评估句子表示的质量。然而任务的复杂性使得它很难推断出句子表示中出现了什么样的信息。在本文将介绍10个probing…