本节课分为两部分,第一部分介绍tensorflow中estimator和特征列的API的使用,estimator是和keras平级的用于模型抽象的高级API,会使用泰坦尼克生存预测项目来详细的讲解特征抽取和estimator使用。学习完以上的基础知识后,在第二部分中会讲解tf1.0的知识点来方便你们对比2.0与1.0的区别。python
第一章到第五章是本门课程的基础内容,掌握了这5章就掌握了tensorflow的基本使用方法,1-5章主要讲的是tensrflow2.0,讲完第五章estimator内容以后,再讲一下1.0的一些东西.网络
课程引入session
keras搭建的model转成estimator;框架
使用一些预约义的estimator(BaseLineClassifier,基线模型,经过随机猜想的方式进行预测;LinearClassifier,是一个线性模型;DNNClassifier,是一个深度全链接的神经网路的分类器),他们都有对应的Regression用于回归问题;函数
Tf.feature_column作特征工程,它是用来组织数据的,会把数据表达成一个一个的feature,而后对这些feature作一些操做,好比说one-hot编码、embadding等等。oop
讲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