通过深度神经网络再识 Estimator

AIA (AI Adventures)系列现在已经进入第六期了。前几期分享当中,Yufeng 介绍了机器学习的核心概念、基本逻辑,也介绍了要进行机器学习需要经过哪些步骤,并根据这些基本知识尝试使用线性评估器 API 打造了鸢尾花分类模型,还介绍了如何用 TensorBoard 将模型可视化分析。今天的分享中,他会带领我们一起把线性鸢尾花分类模型转换为深度神经网络结构。

在这一期的Cloud AI Adventures里,我们将会学习怎样用深度神经网络替换线性模型,从而适应日益复杂的数据集训练任务。

随着线性模型中特征列数量的增加,进而特征列之间的关系变得越来越复杂,在训练中提高精确度也越来越困难。这是一个众人皆知的问题,而数据科学家们解决它的一个有效办法就是转为使用深度神经网络。

为什么叫深度?

深度神经网络可以应对更复杂的数据集,并充分利用其多层结构来更好地概括出未知的数据,故而称其为「深度」。多层次的结构使其相比线性模型能够容纳更多的数据。不过代价就是要花费更长的训练时间,并且模型体积也更庞大,可解释性也更差。那么人们为什么还这么中意它呢?因为它往往能够提升到更高的精度。

深度学习,有如山林漫步,难寻蹊径

关于深度学习,有那么一件颇具技巧的事,那就是把所有参数都调校得「恰到好处」。超大的数据集规模决定了调优过程差不多是无穷无尽的。不过,TensorFlow 内置的 DeepClassifier 和 Regresser 类提供了一些你能随时使用的默认值,他们能让你的训练准备工作又快又轻松。

从线性训练到深度学习

下面举个例子来展示如何将早前我们的线性鸢尾花辨识模型转为深度神经网络(也就是人们常说的 DNN)。

当然, 我们不是要展示 DNN 能处理的 2000 列特征值模型,而是仅仅使用本系列贯穿始终的 4 列特征值。(要么火力全开,要么几乎用不到,哈哈哈)其实它们背后的原理都是一样的。

最主要的变化就是把 LinearClassifier 类换成 DNNClassifier 类。 这一更改会为我们创建一个深度神经网络。

用 DNNClassifier 类替换 LinearClassifier 类

其他变化

其实其他部分几乎没有变动!只是 DNN 多了个之前我们没有用到的参数。由于 DNN 的多层结构,而每一层可能有各不相同的结点数目,所以还需要在实例化时加上 参数。

加上 hidden_units 参数把所有东西都整合起来

这个 参数让你为模型的每一层指定具体的结点数目。也就是让你决定模型的大小和形状,而不需要从头开始手动把所有东西都连接起来。

改变模型的参数配置也就是一行变更的事儿

更多选项

对于任何预知的体系,自定义性和便利性往往不可兼得, DNNClassifier 尝试给开发者提供额外的参数以绕过这个局限。如果留空了,就会由一些合理的默认值来填补空缺。比如优化器、激活函数、淘汰率等等都是可以自定义的。

没错,有这么个激活函数就叫「ELU」

再没有什么其他变化了

还有其他要改变的吗?没了!这就是使用Estimators框架的优势用通用的方法来组织数据、训练、评价、导出模型,同时还能让你用不同的模型和参数来训练。

了解 Estimators 框架:

https://tensorflow.google.cn/api_docs/python/tf/estimator

轻松切入深度学习

又是,深度神经网络比线性模型要更加高效。在这些情况下,TensorFlow 用「只替换一处函数调用」这种少量编码即可切换模型种类的方式,让一切更加简单。此后,你会有更多的时间精力来处理数据、模型和参数,而不是费时管理训练的循环迭代。用TensorFlow Estimators来获得更轻松的 DNN 训练体验吧!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180605G0HUJW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券