tensorflow2 发布以后,动态图和eager execution成为默认模式。同时api和命令都有了非常大的精简,tensorflow 1.1x的api混乱程度令人发指,如果tf不是谷歌出的,按照这种混乱度绝对成不了主流。
尽管很多tensorflow 2 已经发布了很久,但是由于一些历史问题 1.1x 版本仍然有很多人在学习。
如果不得不学习 tf 1.x , 这里结合两个版本的api,进行一个梳理,标注出一些 tf 2.x 已经被废弃或者不被建议使用的api,这类api在学习tensorflow 1 的时候尽量避开,以减少后面学习 tf 2 的时候的成本。
tensorflow 1.1x
下面这张图是tf 1.1x 的api结构图。其中execution engine,以及下面的底层模块不需要关心。
低阶:python和tensorflow的各种基础用法,例如get_variable,constant等,以及其他语言的各种api组成tensorflow的低阶api
所有的内容都需要学。
中阶:中阶api 中的Dataset 是强烈建议学习的模块。在tensorflow 1.12 以后,tf.layers 模块已经和 tf.keras.layers 模块高度趋同,tf.layers 几乎只剩下一层马甲。例如,tf.layers.Conv2D
@tf_export('layers.Conv2D')
class Conv2D(keras_layers.Conv2D, base.Layer):
再例如:tf.layers.Dense
@tf_export('layers.Dense')
class Dense(keras_layers.Dense, base.Layer):
所以在tf 2.0 中 tf.layers 已经被废弃,只剩下 tf.keras.layers。
Dataset :强烈建议学
tf.layers:不建议学
tf.keras.layers:强烈建议学
高阶:高阶api 包括 estimator 和 keras model。
estimator 是模仿sklearn 创造的出来的一个api,在tensorflow 2.0 中并没有被废弃,但是并不是tensorflow首推的api。keras model 是 tensorflow 2.0 中首推的高阶api。
estimator:建议熟练掌握keras model以后再学
keras model:强烈建议
tensorflow 2.x
tensorflow 2.x 的层次结构如下
如果直接学tensorflow 2.x 就按照上面这幅图就可以,如果学tensorflow 1.x,那就按照我给的建议,学会以后将来迁移到 tf2 会有最小的成本。
其他:
tensorflow 其他模块也有很多精简,例如 tf 1.x 中的 tf.train.optimizer ,全部迁移到 tf.keras.optimizer、删除了variable_scope 的概念等等。