如何进行AdaNet工具的分析
如何进行AdaNet工具的分析
如何进行AdaNet工具的分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
AdaNet,这是一个基于TensorFlow的轻量级框架,可以通过最少的专家干预自动学习高质量的模型。 AdaNet以谷歌最新的强化学习和基于进化算法的AutoML为基础,在提供学习保证的同时实现快速灵活的模型构建。而且,AdaNet是一个通用框架,它不仅可以学习神经网络架构,还可以模型集成以获得更好的模型。
AdaNet易于使用,可以构筑高质量的模型,帮助机器学习从业者节省选择最佳神经网络架构的时间,并能够自适应实现将子网络集成学习为新的网络架构的方法。
AdaNet能够添加不同深度和宽度的子网络,以创建多样化的集成,并可以在参数数量和模型性能之间方便做出权衡。
AdaNet自适应地增长了神经网络的集合。在每次迭代中,它测量每个候选者的集成损失,并选择最佳的一个进入下一次迭代。
快速且易于使用
AdaNet实现了TensorFlow Estimator接口,通过封装训练、评估、预测和模型导出,大大简化了机器学习编程。它集成了开源工具,如 TensorFlow Hub modules, TensorFlow Model Analysis, 和 Google Cloud’s Hyperparameter Tuner。分布式训练的支持可显著缩短训练时间,并能与可用的CPU和加速器(例如GPU)进行线性扩展。
AdaNet在CIFAR-100上训练结果,x轴代表训练step数,y轴代表精度。蓝线是训练集上的准确度,红线是测试集上的性能。每隔一百万step就加入一个新的子网络,最终提高整体的性能。灰线和绿线是在添加新子网之前的精度。
AdaNet的学习保证Learning Guarantees
构建神经网络集成有几个挑战:比如要考虑的最佳子网架构是什么?是否要重用相同的架构还是鼓励模型多样性?虽然具有更多参数的复杂子网将倾向于在训练集上表现更好,但由于其更大的复杂性,推广性能可能不好。这些挑战源于如何评估模型性能。可以通过将训练集样本分割来评估,但这样做会减少可用于训练神经网络的样本数量。
AdaNet的做法(源自论文“AdaNet: Adaptive Structural Learning of Artificial Neural Networks” at ICML 2017)是为了优化平衡集合在训练集上的表现及其推广到看不见的数据的能力之间的权衡的目标。直觉上是指只有当新加入的子网络改善整体训练损失而不会影响其推广能力时才将其加入。
这项学习保证意味着:
1)集合的泛化误差受其训练误差和模型复杂性的限制。
2)通过优化此目标,直接最小化此限制。
优化此目标的一个实际好处是,它不需要训练样本集专门划出一部分子集来评估选择要添加到集合中的候选子网,况且可以使用更多的训练数据来训练子网。
要了解更多信息,请浏览有关AdaNet优化目标的教程:
https://github.com/tensorflow/adanet/tree/v0.1.0/adanet/examples/tutorials/adanet_objective.ipynb
用户自定义扩展
AdaNet不仅提供了常用的模型架构供研究人员使用,同时允许用户将自己定义的网络加入进来,用户可以使用adanet.subnetwork.Builder加入使用TensorFlow API(如tf.layers)定义的网络架构,定义自己的AdaNet。
使用TensorFlow构建模型的用户可以轻松将TensorFlow代码转换为AdaNet子网,使用adanet.Estimator提高模型性能,同时获得学习保证。AdaNet将探索他们定义的候选子网的搜索空间,并学习整合子网。
在这个例子中,使用了NASNet-A CIFAR架构的开源实现,将其转换为子网,在八次AdaNet迭代后对CIFAR-10最先进的结果进行了改进。不仅提高进行而且新模型使用的参数更少。
用户还可以使用tf.contrib.estimator.Heads将自己的自定义损失函数用作AdaNet目标函数的一部分,以便训练回归,分类和多任务学习问题。
用户还可以通过扩展adanet.subnetwork.Generator类来定义要探索的候选子网的搜索空间,根据可用硬件增加或减少搜索空间。子网的搜索空间可以简单到使用不同的随机种子复制相同的子网配置,或者训练具有不同超参数组合的数十个子网,让AdaNet选择包含在最终集成模型中的子网。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注恰卡编程网行业资讯频道,感谢您对恰卡编程网的支持。
推荐阅读
-
在Python中,将K添加到列元组列表中的最小元素
处理数据集涉及识别特定列中的最小值并通过添加常量值(K)来更新它。通过实施优化的解决方案,我们可以有效地执行此操作,这对于数据...
-
使用switch case语句编写的C程序,用于计算几何图形的面积
#includevoidmain(){intfig_code;floatside,base,length,...
-
如何使 C# 代码可重用?
要在C#中使代码可重用,请使用接口。接口定义属性、方法和事件,这些成员是接口的成员。接口只包含成员的声明。派生类负责定义成员。这通...
-
C# 中的覆盖和隐藏有什么区别?
方法隐藏在C#中也称为隐藏。父类的方法可供子类使用,无需在遮蔽中使用override关键字。子类有其自己版本的相同函数。在...
-
在Java中使用示例双倍longValue()函数
Java是一种强大的面向对象语言,可以对各种数据类型进行高度的控制和精确度。其中一种功能是doublelongValue(),...
-
如何在Java中定义JSON字段名称的命名约定?
TheFieldNamingPolicycanbeusedtodefineafewstandardnaming...
-
Servlet中的HttpSession接口
在JavaWeb开发领域,了解HttpSession接口是创建动态和响应式Web应用程序的关键。在本文中,我们将探讨...
-
使用while循环查找自然数之和的Java程序
自然数之和可以使用编程语言中的不同迭代语句来计算。迭代语句是执行一组特定代码行直到循环语句中的条件失败的语句。在本文中,我们将讨论...
-
我们可以将Java数组转换为列表吗?
我们可以使用Arrays.asList()方法轻松地将Java数组转换为List。语法publicstaticLi...
-
Java中如何在不使用任何外部库的情况下读取网页内容?
TheURLclassofthejava.netpackagerepresentsaUniformResour...