tensorflow2.0第5章 Tensorflow Estimator使用与tf1.0

本节课分为两部分,第一部分介绍tensorflow中estimator和特征列的API的使用,estimator是和keras平级的用于模型抽象的高级API,会使用泰坦尼克生存预测项目来详细的讲解特征抽取和estimator使用。学习完以上的基础知识后,在第二部分中会讲解tf1.0的知识点来方便大家对比2.0与1.0的区别。

第一章到第五章是本门课程的基础内容,掌握了这5章就掌握了tensorflow的基本使用方法,1-5章主要讲的是tensrflow2.0,讲完第五章estimator内容之后,再讲一下1.0的一些东西.

课程引入

keras搭建的model转成estimator;

使用一些预定义的estimator(BaseLineClassifier,基线模型,通过随机猜测的方式进行预测;LinearClassifier,是一个线性模型;DNNClassifier,是一个深度全连接的神经网路的分类器),他们都有对应的Regression用于回归问题;

Tf.feature_column做特征工程,它是用来组织数据的,会把数据表达成一个一个的feature,然后对这些feature做一些操作,比如说one-hot编码、embadding等等。

讲tf.estimator的过程中涉及到的API列表:

Tf.keras.estimator.to_estimator,可以帮我们把keras模型给转成estimator,有Train、evaluate等几个接口;

Tf.estimator.BaselineClassifier;

Tf.estimator.LinearClassifier;

Tf.estimator.DNNClassifier。

在讲Tf.feature_columnAPI的时候,会使用其中的这么几个接口:

categorical_column_with_vocabulary_list;

numeric_column;

indicator_column;

cross_column。

然后再讲一个keras.layers.DenseFeatures的API,它可以把Tf.feature_column这种表达的数据给读取到网络中来。

泰坦尼克问题引入分析

第一个实战,如何将keras模型给转成estimitor,然后去进行训练和测试。

feature_collumn使用

keras_to_estimator

预定义estimator使用

交叉特征实战

TF1.0引入

之上就完成了一个estimator的实战,在estimator的实战过程中,讲解了如何去使用tf.feature_column,然后去表达数据,如何把我们的keras model转成estimator,去进行使用,如何去使用与定义好的estimator,然后去对问题进行建模,搭建模型,然后如何在feature_columns上去做特征工程,我们用了一个交叉特征去进行了展示,在keras model给展成estimator的过程中,我们遇到了一个bug,tensorflow框架的bug。

接下来是tensorflow1.0的部分,在这部分首先通过几个实战,给大家讲解tensorflow1.0中有但是2.0中没有的知识。

Tf1.0实现全连接网络,这和2.0中第一次实现的全连接网络是一样的,能够体现1.0中的一些特点,包括placeholder、session、feed_dict。

Dataset使用,讲1.0中使用dataset和2.0中有什么区别。

自定义estimator,2.0中推荐使用自定义estimator的方式就是,用keras构建一个模型,然后把它转成estimator,但是1.0中不是这样的,它有一套自定义estimator的方法。

总结2.0和1.0的区别。

讲解1.0这部分所涉及到的API列表:

Tf1.0实现全连接网络:

placeholder、tf.layers.dense(实现全连接层)、tf.train.AdamOptimizer(Adam的优化器);

tf.losses.sparse_softmax_cross_entropy(损失函数);

tf.global_variables_initializer(初始化参数)、feed_dict(填充数据)。

Dataset:(这两个API是用来初始化dataset的,在2.0中已经没有了)

dataset.make_one_shot_iterator、dataset.make_initializable_iterator。

自定义estimator:

tf.feature_column.input_layer(这个在2.0里边就是tf.keras_layers.dense_features);

tf.estimator.EstimatorSpec(这个在1.0和2.0中都有的);

tf.metrics.accuracy。

TF1.0计算图构建

TF1.0模型训练

TF1_dataset使用

TF1_自定义estimator

API改动升级与课程总结

1.0和2.0区别:
①静态图和动态图(即建好之后是否可以修改):

1.0中session、feed_dict、placeholder都是附着于图的,先构建好图,然后再打开一个连接把数据塞进去去进行训练,而2.0中就不需要这样了,所以这三个东西都不要了。同样的1.0中dataset的make_one_shot/initializable_iterator在2.0中被移除了,因为它们也是给静态图做服务的。2.0中跟动态图相关的几个东西,eager mode、@tf.function、AutoGraph,2.0中不需要先构建好图,而是所见即所得,可以用像普通python代码那样那种方式去实现图。tf.function、AutoGraph是一种把普通python代码转化成tensorflow图结构的机制,这种机制的好处:性能好(因为tensorflow的图结构是经过特殊的优化,尤其是在GPU上)、可以导入导出为SavedModel(普通的python中的变量是不能够保存下来的,有了tf.function之后就可以保存到tensorflow的graph_def中去了,可以导出就可以导入,这种方式可以很方便的帮助我们断点续传),例如python中的for/while循环可以变成tensorflow中里边的while_loop,然后if可以变成tensorflow中的tf.cond,for _ in dataset可以变成tensorflow中的dataset.reduce等等

②API变动:

tensorflow现在有2000个API,500个在根空间下(即tf.跟着的)。一些空间被建立了但是没有包含所有相关API,如tf.round没有在tf.math下边,在2.0中tf.round就被移到了tf.math下。有些API在根空间下但是很少被使用如tf.zeta,对于这类API倾向于把它放到子空间下边去。有些经常使用,但不在根空间下,如tf.manip下的对tensor做操作的API,这种API需要放到根空间下可以保持代码简短。有些空间层次太深,这样的就减少一个层次。还有些重复API,如许多layers的API,tf.layers的API都放到同一个地方tf.keras.layers下,tf.losses的API放到tf.keras.losses下边,tf.metrics的放到tf.keras.metrics下,之后构建模型所需要的大部分API,都在tf.keras下边。有些API有前缀但没有建立子空间,如tf.string_strip就应该放到tf.string.strip下边。还有重新组织的API,如tf.debugging、tf.dtypes、tf.io、tf.quantization等。

③如何将1.0代码升级为2.0的代码:

替换Session.run,feed_dict、tf.placeholder变成函数调用。

替换API,tf.get_variable替换为tf.Variable,variable_scope(用来帮助区分变量的,在开发tensorflow代码的时候,可以会使用很多变量,可能会有同样的名字,如果实在同一个命名空间下定义变量的化那么相同名字就可能冲突,variable_scope就是帮助区分这些变量的,它可以定义一个子空间,然后在这些子空间下定义的变量就不会影响其他空间的变量)被替换为以下东西的一个:tf.keras.layers.Layer、tf.keras.Model、tf.Module,它们三个会自动的定义一个命名空间,从而使得变量命名不会冲突。

升级训练流程,2.0中使用tf.keras.Model.fit。

升级数据输入,dataset的使用,1.0中需定义一个iterator,2.0中变成直接输入。

本集总结

tf.estimator的使用:预定义的estimator、自定义的estimator

使用feature_column组织数据

tf1.0基础使用

tf1.0和2.0的区别:API变动,1.0代码如何升级为2.0

原文地址:https://www.cnblogs.com/wisir/p/12192996.html