AIA第六期通过深度神经网络再识
2022/7/14 来源:不详医院可以治疗白癜风 http://www.bdfyy999.com/index.html
AIA(AIAdventures)系列现在已经进入第六期了。前几期分享当中,Yufeng介绍了机器学习的核心概念、基本逻辑,也介绍了要进行机器学习需要经过哪些步骤,并根据这些基本知识尝试使用线性评估器API打造了鸢尾花分类模型,还介绍了如何用TensorBoard将模型可视化分析。今天的分享中,他会带领我们一起把线性鸢尾花分类模型转换为深度神经网络结构。
在这一期的CloudAIAdventures里,我们将会学习怎样用深度神经网络替换线性模型,从而适应日益复杂的数据集训练任务。
随着线性模型中特征列数量的增加,进而特征列之间的关系变得越来越复杂,在训练中提高精确度也越来越困难。这是一个众人皆知的问题,而数据科学家们解决它的一个有效办法就是转为使用深度神经网络。
为什么叫深度?深度神经网络可以应对更复杂的数据集,并充分利用其多层结构来更好地概括出未知的数据,故而称其为「深度」。多层次的结构使其相比线性模型能够容纳更多的数据。不过代价就是要花费更长的训练时间,并且模型体积也更庞大,可解释性也更差。那么人们为什么还这么中意它呢?因为它往往能够提升到更高的精度。
深度学习,有如山林漫步,难寻蹊径
关于深度学习,有那么一件颇具技巧的事,那就是把所有参数都调校得「恰到好处」。超大的数据集规模决定了调优过程差不多是无穷无尽的。不过,TensorFlow内置的DeepClassifier和Regresser类提供了一些你能随时使用的默认值,他们能让你的训练准备工作又快又轻松。
从线性训练到深度学习下面举个例子来展示如何将早前我们的线性鸢尾花辨识模型转为深度神经网络(也就是人们常说的DNN)。
当然,我们不是要展示DNN能处理的列特征值模型,而是仅仅使用本系列贯穿始终的4列特征值。(要么火力全开,要么几乎用不到,哈哈哈)其实它们背后的原理都是一样的。
最主要的变化就是把LinearClassifier类换成DNNClassifier类。这一更改会为我们创建一个深度神经网络。
用DNNClassifier类替换LinearClassifier类
其他变化其实其他部分几乎没有变动!只是DNN多了个之前我们没有用到的参数。由于DNN的多层结构,而每一层可能有各不相同的结点数目,所以还需要在实例化时加上hidden_units参数。
加上hidden_units参数把所有东西都整合起来
这个hidden_units参数让你为模型的每一层指定具体的结点数目。也就是让你决定模型的大小和形状,而不需要从头开始手动把所有东西都连接起来。
改变模型的参数配置也就是一行变更的事儿
更多选项对于任何预知的体系,自定义性和便利性往往不可兼得,DNNClassifier尝试给开发者提供额外的参数以绕过这个局限。如果留空了,就会由一些合理的默认值来填补空缺。比如优化器、激活函数、淘汰率等等都是可以自定义的。
没错,有这么个激活函数就叫「ELU」
再没有什么其他变化了还有其他要改变的吗?没了!这就是使用Estimators框架的优势:用通用的方法来组织数据、训练、评价、导出模型,同时还能让你用不同的模型和参数来训练。
了解Estimators框架: