在本教程中,你将学习如何使用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都是向前迈出的一大步。

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

Auto-Keras与AutoML:入门指南相关推荐

  1. Auto-Keras与AutoML: 入门指南

    原文地址:https://www.pyimagesearch.com/2019/01/07/auto-keras-and-automl-a-getting-started-guide/ 源代码可以在原 ...

  2. 2017 Vue.js 2快速入门指南

    注意,据部分读者反映本文水多,怕湿身者勿进.后续推荐详解 Vue & Vuex 实践 2017 Vue.js 2快速入门指南翻译自Vue.js 2 Quickstart Tutorial 20 ...

  3. TensorFlow 2.0 快速入门指南 | iBooker·ApacheCN

    原文:TensorFlow 2.0 Quick Start Guide 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活 ...

  4. Linux平台上DPDK入门指南

    目录 1. 简介 1.1. 文档地图 2. 系统要求 2.1. X86 上预先设置 BIOS 2.2. 编译DPDK 2.3. 运行DPDK应用程序 2.3.1. 系统软件 2.3.2. 在 Linu ...

  5. Linux系统初学者指南,Linux系统新手入门指南(二)

    在上篇文章中介绍过Linux系统给我们带来的是一片开源的天地,大部分的服务器都是Linux的.本篇文章是针对Linux系统的新手,为新手们准备的入门指南,希望看完本篇文章能让大家无障碍的操作Linux ...

  6. Nginx 入门指南

    Nginx 入门指南 简介: Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强.本教程根据淘宝核心系统服务器平台组的 ...

  7. Linux平台上DPDK入门指南(二)

    4. 编译和运行简单应用程序 本章介绍如何在DPDK环境下编译和运行应用程序.还指出应用程序的存储位置. 注意:此过程的部分操作也可以使用脚本来完成. 4.1. 编译一个简单应用程序 一个DPDK目标 ...

  8. 《C语言入门指南》合集版,学习c语言有这一篇就够了?

    前言: <C语言入门指南>,全文分为3篇,共计34248字,此为合集版,适用初学者入门C语言,非初学者也可以通过本文复习C语言相关知识点,强化记忆!十三肝7天才弄完,贼累了,发布这篇笔记也 ...

  9. [生成对抗网络GAN入门指南](10)InfoGAN: Interpretable Representation Learning by Information Maximizing GAN

    本篇blog的内容基于原始论文InfoGAN: Interpretable Representation Learning by Information Maximizing Generative A ...

最新文章

  1. 快乐的迁移到 Python3
  2. 进行将多张CAD图纸转换成高清WMF格式的操作是什么?
  3. KindEditor自动过滤首行缩进和全角空格的解决方法
  4. 多个mysql 环境_关于几个MySQL环境问题的对比
  5. castle windsor学习----- Services and Components 两者的定义
  6. 手把手教你用 elementUI 实现导航栏
  7. 【转】C/S,B/S区别
  8. 如何保证 Redis 消息队列中的数据不丢失?
  9. php获取信息,PHP文件信息获取函数
  10. 二维数组作数据源填充到repeater
  11. 示例演示公告通知标题无缝向上滚动,文字段落无缝向上滚动,简单的wangeditor富文本编辑器,简单的音乐播放demo...
  12. EF 4.1 一些操作
  13. Android自定义控件(二) 滑动开关
  14. arcgis 经纬度转大地坐标_MapGIS实现大地坐标到经纬度(地理坐标)的换算
  15. 显卡 内存分配 linux,玩转笔记本显卡共享显存设置
  16. CAD绘制PL线(网页版)
  17. 【AI Studio平台基本操作】课程回看
  18. C语言七巧板游戏制作,绘本里的七巧板游戏
  19. 交互技术前沿学习分享——利用眼动追踪改良广告界面
  20. R330 打印机连供墨水红灯常量处理

热门文章

  1. yii2 调用未定义函数_Python 函数(三) 使用规则
  2. 【LeetCode笔记】23.合并K个升序列表(Java、分治、链表)
  3. swift 原生给h5发消息_Swift - 使用HTML5进行iOS开发(将HTML5打包成iOS应用)
  4. 是vans_Vans 的旧海报上原来有这么多学问…
  5. python from import什么意思_Python 引用From import介绍
  6. contab 手动可以 java_crontab 定时执行脚本出错,但手动执行脚本正常
  7. 固态硬盘上安装centos_自己动手丰衣足食 手把手教你安装M.2固态硬盘
  8. suse linux11 改ip,suse11如何修改hostname[Linux基础]
  9. 哀悼!知名教授逝世,享年55岁!
  10. AI领域都在用Python即将被淘汰?网友预测未来的编程语言不会是TA